我在这里有这小段代码:
axe(_, 0, 0).
axe(0, _, 0).
axe(0, 0, _).
在输入?- axe(0, 0, X).
上,我得到以下结果:
X = 0 ; no
X = 0 ; no
true.
如何防止两次得到相同的答案?这显然是错误的。
答案 0 :(得分:2)
对于此代码,Prolog执行回溯并尝试为您的查询找到另一种解决方案。如果在第一个规则中找到X = 0,则认为有效。然后,在第二个规则中,如果X = 0,则发现其成立。因此,您可以通过指定X应该确保取消任何进一步的检查。不等于0,因为它在上一类中已检查。您可以这样:
axe(_,0,0).
axe(0,X,0) :- X \== 0.
axe(0,0,X) :- X \== 0.
希望有帮助!