2016-05-03 2 views
2

У меня есть вопрос к этому: 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). 

Я новичок для Пролога, и мне трудно понять этот запрос, особенно часть \+.

Что я понимаю: для того, чтобы получить самого старого человека, мы возьмем всех людей с возрастом X, без людей с возрастом Y больше X. Но это вернет самого молодого человека. Я смущен: D

Помощи по этому вопросу?

+1

Он гласит: P является человеком (кто возраст X) такое, что не существует никакого другого человека, для которого его/ее возраст выше, чем P, возраст. – gusbro

+0

@gusbro Я понимаю, отправьте его как ответ, пожалуйста. –

+0

Еще интереснее: добавьте «возраст (тони, 75)». И снова задайте вопрос! Вы не станете самым старым человеком, кроме самых старых. – false

ответ

1

Он гласит:

P является человек (кто возраст X), так что нет другого человека, для которого его/ее возраст выше, чем P возраст «s.

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). 
Смежные вопросы