我有一段代码有点像这样
call(Person, Someone) :-
canCall(Person, Someone, []).
canCall(Person, Someone, _) :-
hasNumber(Person, Someone).
canCall(Person, Someone, Contacted) :-
personExists(SomeoneElse),
\+ member(SomoneElse, Contacted),
knows(SomeoneElse, Someone),
canCall(Person, SomeoneElse, [Someone | Contacted]).
(知道如果他们住在一起,如果他们一起工作等等,检查它肯定会返回正确的结果并终止。)
当我运行此查询时,代码只提供默认解决方案(对于第一个子句)和第二个子句的单个重复解决方案
?- call(david, Someone).
并搜索所有替代解决方案。它不只是提供重复的解决方案。事实上,我不介意我是否有重复的解决方案。它只是反复输出一个答案。
即使执行了追踪,我也不确定问题出在哪里。
答案 0 :(得分:0)
我不知道为什么,但是
call(Person, Someone) :-
canCall(Person, Someone, []).
canCall(Person, Someone, _) :-
hasNumber(Person, Someone).
canCall(Person, Someone, Contacted) :-
personExists(SomeoneElse),
\+ member(SomoneElse, Contacted),
canCall(Person, SomeoneElse, [Someone | Contacted]),
knows(SomeoneElse, Someone).
的工作。这不是我的原始代码,所以可能还有一些其他潜在原因(这个例子实际上没有改变)。