首页 文章

在Prolog的家谱

提问于
浏览
0

当我试图看到谁是兄弟谁和妹妹一样,它给了我儿子和女儿,我找不到错误......

father(pedro-i,fernando-i).
    father(pedro-i,beatriz(1347)).
    father(pedro-i,joão(1349)).
    father(pedro-i,dinis(1354)).
    father(pedro-i,joão_grão_mestre_da_ordem_de_avis).
    mother(constança(1320),luis).
    mother(constança(1320),maria(1342)).
    mother(constança(1320),fernando-i).
    mother(inês_de_castro,beatriz(1347)).

我很欣赏任何其他意见

ancestor(X,Y) :- mother(X,Y).
    ancestor(X,Y) :- father(X,Y).

    if_then_else(X,Y,male) :- father(X,Y).
    if_then_else(X,Y,female) :- mother(X,Y).

    son(X,Y) :- father(X,Y).
    sister(X,Y) :- ancestor(Z,Y),X\==Y,if_then_else(X,Y,female).
    brother(X,Y) :- ancestor(Z,Y),X\==Y,if_then_else(X,Y,male).
    descendent (X,Y) :- filho(X,Y). 
    descendent (X,Y) :- filho(X,Z),descendent (Z,Y).
    grandfather(X,Y) :- ancestor(X,Z),ancestor(Z,Y).
    grandmother(X,Y) :- ancestor(X,Z),ancestor(Z,Y).
    grandchildren(X,Y) :- ancestor(Z,X),ancestor(Y,Z).

    uncle(X,Y) :- brother(X,Z),ancestor(Z,Y).

1 回答

  • 1

    你的子句 brother(X,Y) :- ancestor(Z,Y),X\==Y,if_then_else(X,Y,male). 要求Y有一个祖先,但X也需要一个祖先 - 同一个祖先:

    brother(X,Y) :- ancestor(Z,Y),ancestor(Z,X), X\==Y,if_then_else(X,Y,male).
    

    你还需要在最后消除X是Y的父亲的要求 .

    brother(X,Y) :- ancestor(Z,Y),ancestor(Z,X), X\==Y,male(X).
    

    male 需要完全依赖于个人(你不需要成为一个男性的父亲 . ) male (fernando-i).

相关问题