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].
你好,我正在研究一个 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].