2

我是 Prolog 的新手。我有这个代码:

loves(vincent, mia).
loves(marsellus,mia).
jealous(X,Y):- loves(X,Z), loves(Y,Z).

我询问jealous(vincent,W)。但是 SWI-Prolog 给了我W = vincent!不应该W = marsellus吗?

4

1 回答 1

3

这只是您得到的第一个结果。如果你让 Prolog 解释器给你下一个结果,你也会得到marsellus

你的规则的问题在于它并没有禁止X嫉妒他或她自己。要解决此问题,请添加一个X不得等于的条件Y

jealous(X,Y):- loves(X,Z), loves(Y,Z), X \= Y.

演示。

于 2014-10-07T17:23:15.063 回答