在Prolog中检查家谱的后代

问题描述 投票:0回答:1

如何使用递归方法descendent_of来递归检查X是否为Y的后代?事实基础包括男性和女性,以及father_of / mother_of陈述。

/* Facts */
male(roy).
male(lee).
...
female(joy).
female(ana).
...

/* Rules */
grandmother_of(X, Z) :- 
        mother_of(X, Y), 
        (mother_of(Y, Z);
                father_of(Y, Z)).


grandfather_of(X, Z) :- 
        father_of(X, Y), 
        (mother_of(Y, Z);
                father_of(Y, Z)).


parent_of(X,Y) :-
    mother_of(X,Y);father_of(X,Y).


descendent_of(X,Y) :-
    */ Recursive method here */

如何设置停止条件?此外,如果函数仅返回布尔值,则递归在prolog中如何工作?

任何评论/建议都将不胜感激。

recursion prolog
1个回答
0
投票

[如果您查看descendant_of(X,Y),则当XY的后代时应该为真。我在这里做了一些技巧,以实现与parent_of的一致性并将谓词ancestor_of/2引入为

 descendent_of(X,Y) :- ancestor_of(Y,X)

知道XY的祖先

  1. [XY或]的父级>
  2. [XZ的父级,而ZY的后代
© www.soinside.com 2019 - 2024. All rights reserved.