在Prolog查询中找到最老的人

时间:2016-05-03 15:41:00

标签: prolog

我对此有疑问:Finding the oldest person in Prolog

数据:

age(john, 10).
age(mary, 15).
age(rose, 75).
age(jack, 49).
age(carl, 17).
age(lucy, 66).

因此,此查询将返回最老的人:

oldest(P) :- age(P, X), \+ ( age(_, Y), Y > X ).

我是Prolog的新手,我很难理解这个查询,尤其是\+部分。

我的理解:为了得到年龄最大的人,我们将所有年龄为X岁的人,没有年龄超过X岁的人。但这将使最年轻的人回归。我很困惑:D

你能帮忙阅读这个查询吗?

2 个答案:

答案 0 :(得分:1)

它的内容如下:

P 是一个人(年龄 X ),因此没有其他人的年龄高于 P 的年龄。

答案 1 :(得分:0)

这是另一种阅读谓词

的方法
% For all person P, P is the oldest person if 
oldest(P) :-
    % exist X such that the age of P is X, and
    age(P, X),
    % do not exist Y such that Y is the age of some person and Y > X.
    \+ (age(_, Y) , Y > X).