2014-10-07 39 views
2

我是Prolog的新手。我有这样的代码:不理解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

回答

3

这只是你得到的第一个结果。如果你问Prolog翻译给你下一个结果,你也会得到marsellus

你的规则存在的问题是,它并不禁止X嫉妒他或她自己。为了解决这个问题,添加一个条件,必须X不等于Y

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

Demo.