0

假设我有这样的目标:

times(0,_,0).                          % zero times X is zero
times(X,Y,Z) :- times(Y,X,Z) ,!.       % X * Y = Y * X

当我试图问:

?- times(0,1,X).

我得到了双重答案:

X = 0 ;
X = 0.

可能是因为第一个答案是从 推导出来的fact,第二个答案是从 推导出来的rule
问题 - 如何让序言只给出一个答案而不是两个?

4

1 回答 1

2

添加剪切以“确认”第一选择:

times(0,_,0) :- !. 

从第二个中禁止 0:

times(X,Y,Z) :- X \= 0, times(Y,X,Z).

我已经删除了剪辑,但如果有更多规则,请留下它。但我认为“自反性”规则会给你带来麻烦,并且会出现不适当的递归。

于 2012-08-17T08:43:28.887 回答