Prolog - 制定在有限数量的原子中找到最高值的查询?

时间:2015-11-06 16:17:35

标签: prolog

假设我有一个原子名称和年龄对:

person(bob,42).
person(jeff,12).
person(adam,23).
...

我想通过查询(而不是谓词)找到最年轻的人。

我如何进行此类查询?

2 个答案:

答案 0 :(得分:1)

您可以使用通用量词制定多部分查询,如下所示:

person(X,AgeX), forall(person(Y,AgeY), X=Y;AgeX<AgeY).

基本上,此查询表明X必须是这样的:对于数据库中的每个已知person Y,它应该是同一个人(X=Y部分)或另一个人必须年龄较大(AgeX<AgeY部分)

Demo.

答案 1 :(得分:0)

library(aggregate)解决了这样的任务,还有更多...尝试

?- aggregate(min(Age,Person), person(Person,Age), R).
R = min(12, jeff).