Prolog中的重复解决方案

时间:2016-03-21 09:27:33

标签: loops prolog duplicates infinite repeat

我有一段代码有点像这样

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).

并搜索所有替代解决方案。它不只是提供重复的解决方案。事实上,我不介意我是否有重复的解决方案。它只是反复输出一个答案。

即使执行了追踪,我也不确定问题出在哪里。

1 个答案:

答案 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).

的工作。这不是我的原始代码,所以可能还有一些其他潜在原因(这个例子实际上没有改变)。