序言在家庭中找到堂兄弟姐妹

prolog finding first cousins in family

正在尝试做一个序言问题来寻找堂兄弟姐妹!

/* first person is parent of second person */
parent(a, b).
parent(b, f).
parent(a, d).
parent(f, g).
parent(a, k).
parent(f, h).
parent(k, l).
parent(f, i).
parent(k, m).
parent(l, t).
parent(b, e).

sibling(X,Y) :- parent(Z,X), parent(Z,Y), not(X=Y).

grandparent(X, Z) :-
    parent(X, Y),
    parent(Y, Z).

cousin1(Child1,Child2) :-
    grandparent(Y1,Child1),
    grandparent(Y2,Child2),
    not(sibling(Child1,Child2)),
    Y1=Y2 .

似乎可以正常工作,但是如果输入相同的 child,有没有办法阻止它返回 true?

编辑:最终答案

cousin1(Child1,Child2) :-
    parent(Y1,Child1),
    parent(Y2,Child2),
    sibling(Y1,Y2).

写一个 .not-self 谓词,如果 children 相等,则 returns 为假。将其添加到您的表亲谓词中。

最终答案!

 cousin1(Child1,Child2) :-
     parent(Y1,Child1),
     parent(Y2,Child2),
     sibling(Y1,Y2).