prolog在家庭中寻找第一代堂兄弟

时间:2015-05-26 11:40:53

标签: prolog

尝试做一个序言问题,找到第一代堂兄弟!

/* 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 .

似乎工作正常,但如果输入同一个孩子,有没有办法阻止它返回true?

编辑:最终答案

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

2 个答案:

答案 0 :(得分:0)

编写.not-self谓词,如果子项相等则返回false。将其添加到您的堂兄谓词中。

答案 1 :(得分:0)

最后答案!

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