假设我有一个原子名称和年龄对:
person(bob,42).
person(jeff,12).
person(adam,23).
...
我想通过查询(而不是谓词)找到最年轻的人。
我如何进行此类查询?
答案 0 :(得分:1)
您可以使用通用量词制定多部分查询,如下所示:
person(X,AgeX), forall(person(Y,AgeY), X=Y;AgeX<AgeY).
基本上,此查询表明X
必须是这样的:对于数据库中的每个已知person
Y
,它应该是同一个人(X=Y
部分)或另一个人必须年龄较大(AgeX<AgeY
部分)
答案 1 :(得分:0)
library(aggregate)解决了这样的任务,还有更多...尝试
?- aggregate(min(Age,Person), person(Person,Age), R).
R = min(12, jeff).