繁体   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