gpt4 book ai didi

recursion - Prolog 递归 - 满足两个方向(简单)

转载 作者:行者123 更新时间:2023-12-03 22:26:59 26 4
gpt4 key购买 nike

我是 Prolog 的新手,我被分配了这项任务。

我的代码如下:

relatives(cindy,tanya).
relatives(tanya,alan).
relatives(alan,mike).
relatives(kerry,jay).
relatives(jay,alan).

isRelated(X,Y):-
relatives(X,Y).
isRelated(X,Y):-
relatives(X,Z),
isRelated(Z,Y).

很简单。这表明如果:

?- isRelated(cindy,mike).

Prolog 将返回 true。现在,我一直在研究如何让它返回 true,如果:

?- isRelated(mike,cindy).

我一直在尝试想出一些想法,例如如果 isRelated(Z,Y) 返回 false,则切换 X 和 Y,然后再次运行 isRelated。但我不确定 Prolog 是否允许这样的想法。任何提示或建议将不胜感激。谢谢!

更新:************************************

所以我补充说:

isRelated(X,Y):-
relatives(X,Y);
relatives(Y,X).

这将满足“直接”关系,但我发现它不能满足间接关系。

我真的很想做一些事情,如果初始查询:

isRelated(mike,cindy)

失败,然后尝试通过切换 X 和 Y 来查看是否反过来:

isRelated(cindy,mike)

那肯定会返回 true。我只是不知道如何在 Prolog 中从句法上做到这一点。

最佳答案

进一步提示评论中的人,因为我还不能发表评论:根据你最初的一套规则和事实,isRelated(cindy,tanya) 是真的,但是 isRelated(tanya,cindy) 不是,所以你需要制作 isRelated(X,Y) 对称的;对 isRelated 添加什么简单的内容可以实现这一点?

此外,您可以尝试绘制关系图 relatives(X,Y),用从 X 到 Y 的箭头表示所有基本事实,看看这是否有助于您思考如何Prolog 解释器将尝试满足查询。

关于recursion - Prolog 递归 - 满足两个方向(简单),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9408002/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com