prolog - 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 的表兄弟,我需要进行哪些更改?谢谢。:)
解决方案
首先,你那里有一个小错误。您应该更正兄弟规则 - 这里只是一个小提示,尝试使用该规则
sibling(grace,grace)
回到您的问题,在您获得第一个响应后,单击;
或这些; n r space TAB
键中的任何一个,因为您看到的结果是第一个正确的响应。如果您想看到下一个正确的结果,您需要使用上面的键之一。
您也可以尝试使用findall
谓词查看列表中的所有结果
?- findall(X, cousin(grace, X),Z).
Z = [sam, joel, ben].
推荐阅读
- oracle - oracle sqlplus select query with apostrophe converts to?
- regex - 正则表达式 \w 匹配 ê
- javascript - iphone上没有出现按钮中的文字
- python - 这个几何布朗运动参数估计器怎么可能没有循环?
- javascript - 通过对象键嵌套在另一个数组内的另一个对象中的对象键数组?
- android - 您如何检索自动生成的 ID 以删除 Firebase 中的数据
- flash - 如何使用 Jpexs 反编译器输出
- blazor - 更新 MudBlazor 后,我的带有 NavMenu 的抽屉消失了
- django - 如何更改默认的 django rest_auth 重定向?
- python - 尝试使用 selenium 无头 chrome 进行身份验证时,AWS EC2 超时