我有一些事实:
parent(bob, anne). % bob is a. parent of anne.
sibling(anne, mary).
我正在尝试从兄弟事实中获取父母,因此如果我查询parent(X, mary)
,则bob应该是输出。到目前为止,我的规则是:
siblingOf(X,Y) :- sibling(X,Y).
siblingOf(X,Y) :- sibling(Y,X).
parent(X,Z) :-
siblingOf(Z,Y),
parent(X,Y).
它无限循环。我怀疑这是因为递归调用没有结束条件。我该怎么做才能使其正常工作?
答案 0 :(得分:1)
您已经使用了相同的技巧:使用不同的名称来创建谓词,从而确保您在此处不会递归调用谓词:
parentOf(P, C) :-
parent(P, C).
parentOf(P, C) :-
siblingOf(C, S),
parent(P, S).
因此,我们说X
可以基于以下两个条件成为Y
的父母:
parent/2
事实,因此明确地提到了父关系;或P
是我们的孩子parent/2
sliblingOf/2
的{{1}}。然后我们获得:
C