我对 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 的语法上做到这一点。