2012-02-29 76 views
0

完整的prolog初學者在這裏。如何從Prolog中的知識庫返回獨特的結果?

比方說,我有一個包含食物序言知識基礎和它的價格,例如:

food(banana,99). 

我試圖寫一個斷言,如果有,將返回true知識庫中兩個或更多具有相同價格的項目。我現在遇到的問題是,查詢我已經寫了:如果我的理解是什麼問題(即它的發現同樣與價格X.數據庫只有一個項目

multiple(X) :- food(_ ,X), food(_ ,X). 

將返回true項目兩次,並返回true),但我不知道如何編寫一個查詢,將查找兩個或兩個以上來自食物的獨特項目。

我試圖寫一個「獨特」的規則,如下:

multiple(X) :- food(Y,X), food(Z,X), unique(Y,Z). 
unique(Y,Z) :- Y /= Z 

但是,這似乎並沒有工作。

謝謝。

回答

6

在標準Prolog中,「不等於」寫爲\=,而不是/=。您的解決方案應該工作:

?- [user]. 
|: food(milk, 10). 
|: food(banana, 99). 
|: food(strawberry, 40). 
|: food(bread, 40). 
|: % user://2 compiled 0.00 sec, 664 bytes 
true. 

?- food(X, Price), food(Y, Price), X \= Y. 
X = strawberry, 
Price = 40, 
Y = bread ; 
X = bread, 
Price = 40, 
Y = strawberry ; 
false. 

除了它可能會返回重複。爲了擺脫那些,使用查詢,如

food(X, Price), food(Y, Price), X @< Y. 

它使用術語排序@<以確保第一項是「小於」第二(這意味着它們不相等)。

+0

啊,應該知道這是一件小事。我認爲它現在有效,謝謝。 – dmallory42 2012-02-29 17:15:31