在Prolog查询中查找最年长的人

在Prolog查询中查找最年长的人,prolog,Prolog,我有一个问题: 数据: 因此,此查询将返回最年长的人: oldest(P) :- age(P, X), \+ ( age(_, Y), Y > X ). 我是Prolog新手,很难理解这个查询,尤其是\+部分 我的理解是:要得到最年长的人,我们需要所有年龄为X的人,没有那些年龄为Y大于X的人。但这将返回最年轻的人。我很困惑:D 您能帮助阅读此查询吗?内容如下: p是一个人(其年龄为X),因此没有其他人的年龄高于p。这里是另一种解读谓词的方法 上面写着:P是一个人(其年龄为X),因此没有其

我有一个问题:

数据:

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

oldest(P) :- age(P, X), \+ ( age(_, Y), Y > X ).
我是Prolog新手,很难理解这个查询,尤其是
\+
部分

我的理解是:要得到最年长的人,我们需要所有年龄为X的人,没有那些年龄为Y大于X的人。但这将返回最年轻的人。我很困惑:D

您能帮助阅读此查询吗?

内容如下:


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

这里是另一种解读谓词的方法


上面写着:P是一个人(其年龄为X),因此没有其他人的年龄高于P的年龄。@gusbro我明白,请将其作为答案发布。更有趣的是:添加
年龄(tony,75)。
然后再次提问!你不会得到最年长的人,而是最年长的人。
oldest(P) :- age(P, X), \+ ( age(_, Y), Y > X ).
% 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).