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

时间:2018-07-23 20:19:21

标签: prolog

我在这里有这小段代码:

axe(_, 0, 0).
axe(0, _, 0).
axe(0, 0, _).

在输入?- axe(0, 0, X).上,我得到以下结果:

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

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

1 个答案:

答案 0 :(得分:2)

对于此代码,Prolog执行回溯并尝试为您的查询找到另一种解决方案。如果在第一个规则中找到X = 0,则认为有效。然后,在第二个规则中,如果X = 0,则发现其成立。因此,您可以通过指定X应该确保取消任何进一步的检查。不等于0,因为它在上一类中已检查。您可以这样:

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

希望有帮助!