【问题标题】:Finding the oldest person in Prolog Query在 Prolog Query 中查找最年长的人
【发布时间】:2016-05-04 04:43:40
【问题描述】:

我对此有疑问: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

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

【问题讨论】:

  • 它的意思是:P 是一个人(他的年龄是 X),因此没有其他人的年龄高于 P 的年龄。
  • @gusbro 我明白了,请将其作为答案发布。
  • 更有趣:添加age(tony,75). 并再次提问!你不会得到最年长的人,而是最年长的人。

标签: prolog


【解决方案1】:

上面写着:

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

【讨论】:

    【解决方案2】:

    这是阅读谓词的另一种方式

    % 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).
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多