【问题标题】:PROLOG family tree: how can I output all the siblings and cousins?PROLOG 家谱:如何输出所有的兄弟姐妹和堂兄弟?
【发布时间】:2021-10-03 17:53:21
【问题描述】:

您好,我正在研究 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


    【解决方案1】:

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

    sibling(grace,grace)
    

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

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

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

    【讨论】:

    • 请问“sibling(X, Y) :- dif(X, Y), parent(Z, X), parent(Z, Y)." 解决兄弟规则的问题吗?跨度>
    • 是的,正是:)
    猜你喜欢
    • 2017-08-18
    • 1970-01-01
    • 2019-05-06
    • 2019-08-29
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    相关资源
    最近更新 更多