繁体   English   中英

Prolog家庭规则

[英]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的父代:

  1. 我们定义了一个parent/2事实,因此明确提到了parent关系; 要么
  2. P是子项CsliblingOf/2parent/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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM