[英]Prolog family rules
我有一些事实:
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).
它会无限循环。 我怀疑这是因为递归调用没有结束条件。 我该怎么做才能使其正常工作?
您已经使用了相同的技巧:使用不同的名称创建谓词,并确保不要在此处递归调用谓词:
parentOf(P, C) :-
parent(P, C).
parentOf(P, C) :-
siblingOf(C, S),
parent(P, S).
因此,根据两个条件,我们可以说X
可以是Y
的父代:
parent/2
事实,因此明确提到了parent关系; 要么 P
是子项C
的sliblingOf/2
的parent/2
。 然后我们获得:
?- parentOf(X, Y).
X = bob,
Y = anne ;
X = bob,
Y = mary.
?- parentOf(X, mary).
X = bob.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.