【发布时间】:2017-03-17 01:51:25
【问题描述】:
我正在学习使用 SWI Prolog,并且正在学习使用列表。一个小练习是检查一个元素是否在列表中。这是我得到的:
member(X,[X|_]).
member(X,[_|T]):-member[X|T].
第一种情况按预期进行:
?- member(a,[b,a]).
true.
但第二个没有,因为似乎出现了一些回溯:
?- member(a,[a,b]).
true ;
false.
我怎样才能防止这种情况发生,即让 Prolog 只返回我 true? (我不想忽略 false。)
【问题讨论】:
-
第一个
true表示成功。false意味着当你用;要求它找到更多解决方案时,它没有找到更多解决方案,所以它在那个时候返回了false。正常的 Prolog 行为。此外,member/2是一个标准的 Prolog 谓词。你应该把你的名字命名为别的。标准谓词与您显示的行为相同。