不懂Prolog的结果

时间:2014-10-07 17:19:43

标签: prolog prolog-toplevel

我是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

1 个答案:

答案 0 :(得分:3)

这只是你得到的第一个结果。如果你要求Prolog口译员给你下一个结果,你也会得到marsellus

您的规则存在的问题是,它并不禁止X嫉妒他或她自己。要解决此问题,请添加X不得等于Y的条件:

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

Demo.