首页 > 解决方案 > PROLOG 家谱:如何输出所有的兄弟姐妹和堂兄弟?

问题描述

嗨,我正在研究一个 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 的表兄弟,我需要进行哪些更改?谢谢。:)

标签: prolog

解决方案


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

sibling(grace,grace)

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

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

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

推荐阅读