【发布时间】:2014-04-17 22:11:26
【问题描述】:
我遇到了一个小问题,不知道在哪里可以找到解决方案。你可能听说过飞鸟的问题:
bird(eagle).
bird(penguin).
can_fly(penguin):-!,fail.
can_fly(X):-bird(X).
我试图修改这些知识并将其用于一些“爱情故事”。想象一下这个
maried(a, b).
maried(c, d).
lovers(a, d).
likes(X, Y):-maried(X, Y).
现在我想说“如果 X 与 Y 结婚,但 X 是 Z 的情人,那么 X 不喜欢 Y,但喜欢 Z”。 我试过这个:
likes(X, Y) :- lovers(X, Y).
likes(X, Y) :- maried(X, Y), lovers(X, _),!,fail.
likes(X, Y) :- maried(X, Y).
除非我想评估一个目标,否则它会起作用
likes(A, B).
如果数据库中有更多事实并且Prolog找到第一个作弊者,它将停止回溯,我找不到任何其他解决方案。也许之后会很明显,但现在我什么都不想了..
在此先感谢(也许对我的英语感到抱歉:))
【问题讨论】:
标签: prolog backtracking negation