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
?
我是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
?
这只是你得到的第一个结果。如果你问Prolog翻译给你下一个结果,你也会得到marsellus
。
你的规则存在的问题是,它并不禁止X
嫉妒他或她自己。为了解决这个问题,添加一个条件,必须X
不等于Y
:
jealous(X,Y):- loves(X,Z), loves(Y,Z), X \= Y.