PROLOG家谱:如何输出所有的兄弟姐妹和堂兄弟姐妹?

PROLOG family tree: how can I output all the siblings and cousins?

你好,我正在研究一个 PROLOG 家谱问题,这是我目前所知道的:

/*1. Write Prolog clauses to express the following three relationships, 
 * given the parent/2 relationship: grandparent/2, sibling/2, cousin/2.*/

% clauses
parent(jill, amy).
parent(jill, tim).
parent(jill, john).
parent(amy, grace).
parent(amy, anna).
parent(tim, sam).
parent(tim, joel).
parent(tim, ben).

% rules
grandparent(X,Y) :- 
    parent(Z,Y), 
    parent(X,Z).
sibling(X, Y) :-
    parent(Z, X),
    parent(Z, Y).
cousin(X,Y) :- 
    parent(P, X), 
    parent(S, Y), 
    sibling(P, S).

当我输入时:

?- sibling(X, tim).

输出给出:

X = amy

但约翰和艾米都是蒂姆的兄弟姐妹。同样的问题发生在:

?- cousin(ben, X).

给出:

X = grace

当格蕾丝和安娜都是本的表亲时。 我需要做哪些更改才能使代码输出 tim 的所有兄弟姐妹和 ben 的堂兄弟姐妹? 谢谢。 :)

首先,你那里有一个小错误。 您应该更正兄弟规则 - 这里只是一个小提示,请尝试按原样使用规则

sibling(grace,grace)

然后回到您的问题,在您获得第一个响应后单击 ; 或这些 ; n r space TAB 键中的任何一个,因为您看到的结果是第一个正确的响应。如果你想看到下一个正确的结果,你需要使用上面的键之一。

您也可以尝试使用findall谓词来查看列表中的所有结果

?- findall(X, cousin(grace, X),Z).
Z = [sam, joel, ben].