Loops Prolog中的重复解
我有一段代码是这样的Loops Prolog中的重复解,loops,prolog,duplicates,infinite,repeat,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), know
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]).
(knows会检查他们是否住在一起、是否一起工作等。它肯定会返回正确的结果并终止。)
当我运行这个查询时,代码只给出了默认的解决方案(对于第一个子句)和第二个子句的一个重复的解决方案
?- call(david, Someone).
并寻找所有替代解决方案。它不仅仅是给出重复的解决方案。事实上,我不介意我有重复的解决方案。它只是重复输出一个答案
即使在执行跟踪之后,我也不确定问题出在哪里。我不知道原因,但是
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).
成功了。这不是我的原始代码,因此可能还有其他一些潜在原因(这个示例实际上在没有更改的情况下工作)。我不知道为什么,但是
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).
成功了。这不是我的原始代码,因此可能还有其他一些潜在原因(该示例实际上在没有更改的情况下有效)。如果两个人可以通过多种方式相互了解,一个人可以通过多种方式呼叫其他人,那么一个人可以通过多种方式呼叫其他人。您是否可以添加一些示例事实和输出?另外,您在
\+成员(其他人,已联系)中有输入错误,
;您想要“someonether”您可能希望避免使用诸如call
这样的通用名称定义谓词,因为call
已经是预定义的Prolog谓词。为什么personExists(someonether)
?这绝对是多余的。如果两个人可以通过多种方式相互认识,一个人可以通过多种方式打电话给其他人,那么一个人可以通过多种方式打电话给其他人。您可以添加一些示例事实和输出吗?另外,您在\+成员(SomoneElse,Contacted)中确实有输入错误,
;您想要“someonether”您可能希望避免使用诸如call
这样的通用名称定义谓词,因为call
已经是预定义的Prolog谓词。为什么personExists(someonether)
?这绝对是多余的。@repeat:好吧,既然它终止并找到了所有正确的答案,我假设它有效…@repeat:好吧,既然它终止并找到了所有正确的答案,我假设它有效。。。