Prolog 如何避免得到两次相同的答案?

Prolog 如何避免得到两次相同的答案?,prolog,Prolog,我这里有一段代码: axe(_, 0, 0). axe(0, _, 0). axe(0, 0, _). 输入时?-axe(0,0,X)。我得到以下结果: X = 0 ; no X = 0 ; no true. 如何避免得到两次相同的答案?这显然是错误的。对于这段代码,Prolog会进行回溯,并尝试为您的查询找到另一个解决方案。If使用第一条规则查找,如果X=0,则该规则有效。然后,根据第二条规则,它还发现,如果X=0,则为真。因此,您可以通过指定X不应等于0来确保取消任何进一步的检查,因为它

我这里有一段代码:

axe(_, 0, 0).
axe(0, _, 0).
axe(0, 0, _).
输入时
?-axe(0,0,X)。
我得到以下结果:

X = 0 ; no
X = 0 ; no
true.

如何避免得到两次相同的答案?这显然是错误的。

对于这段代码,Prolog会进行回溯,并尝试为您的查询找到另一个解决方案。If使用第一条规则查找,如果X=0,则该规则有效。然后,根据第二条规则,它还发现,如果X=0,则为真。因此,您可以通过指定X不应等于0来确保取消任何进一步的检查,因为它是在上一个类别中检查的。您可以这样做:

axe(_,0,0).
axe(0,X,0) :- X \== 0.
axe(0,0,X) :- X \== 0.

希望有帮助

要理解这个例子的要点是,它不是“错的”!您只需获得一个冗余的解决方案!因此,这不是一个关于正确性的问题。根据您提供的事实,这并不是真正的“错误”。只有当你不想有重叠的解决方案时,这才是“错误的”。Prolog将找到每个解决方案选项。在你的例子中,你的事实展示了三种成功的方式
axe(0,0,X)
。使用
X=0
有两种不同的方法,其中一种方法是
X
的任何值都将使其成功(因此最终的
为true
)。