2016-05-03 6 views
2

Ich habe eine Frage dazu: Finding the oldest person in PrologSuche nach der ältesten Person in Prolog Abfrage

Daten:

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

Also diese Abfrage wird die älteste Person zurück:

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

Ich bin neu Prolog und ich habe eine harte Zeit, diese Abfrage zu verstehen, vor allem die \+ Teil.

Was ich verstehe: um die älteste Person zu bekommen nehmen wir alle Personen mit einem Alter von X, ohne die Personen mit einem Alter von Y größer als X. Aber dies würde die jüngste Person zurückgeben. Ich bin verwirrt: D

Können Sie beim Lesen dieser Abfrage helfen?

+1

Dort heißt es: P ist eine Person (wer Alter ist, ist X), so dass es keine andere Person ist, für die sein/ihr Alter höher als P ist Alter. – gusbro

+0

@gusbro Ich verstehe, post als Antwort bitte. –

+0

Noch interessanter: add 'age (tony, 75) .' Und stelle die Frage erneut! Sie werden nicht die älteste Person, sondern die ältesten Personen bekommen. – false

Antwort

1

Dort heißt es:

P eine Person ist (wer Alter ist, ist X), so dass es keine andere Person ist, für die sein/ihr Alter ist höher als P ‚s Alter.

0

Hier ist eine weitere Möglichkeit, die Prädikat zu lesen

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