2014-10-07 44 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.