簡體   English   中英

如何從Prolog知識庫中返回唯一結果?

[英]How do I return unique results from a knowledge base in Prolog?

在此處完成序言初學者。

假設我有一個Prolog知識庫,其中包含食物及其價格,例如:

food(banana,99).

等等

我正在嘗試編寫一個謂詞,如果知識庫中有兩個或兩個以上價格相同的項目,則返回true。 我遇到的問題是我編寫的查詢:

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

如果數據庫中只有一個價格為X的商品,則返回true。我理解問題所在(兩次查找同一商品並返回true),但是我不明白如何編寫一個查詢來找到兩個或更多來自食物的獨特物品。

我嘗試編寫“唯一”規則,如下所示:

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

但這似乎不起作用。

謝謝。

“不等於”在標准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.

它使用術語排序@<來確保第一個術語“小於”第二個術語(這意味着它們不相等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM