Predicate de familie
Definiți, pentru baza de cunoștințe de mai jos, predicatele următoare:
mother_of/2brother_of/2sister_of/2uncle_of/2aunt_of/2grandfather_of/2grandmother_of/2
Verificați aceste predicate punând întrebări și urmărind pe arborele genealogic.
Exemplu:
?- father_of(sandra, sam).
true.
?- grandmother_of(olivia, lisa).
true.
Te-ai blocat?
editor
soluție
male(sam).
male(oliver).
male(ben).
male(peter).
male(roger).
female(elizabeth).
female(sandra).
female(mary).
female(lisa).
female(olivia).
parent_of(sandra, sam).
parent_of(sandra, elizabeth).
parent_of(ben, sam).
parent_of(ben, elizabeth).
parent_of(peter, oliver).
parent_of(peter, sandra).
parent_of(roger, ben).
parent_of(roger, lisa).
parent_of(olivia, roger).
parent_of(olivia, mary).
father_of(X, Y) :-
parent_of(X, Y),
male(Y).
mother_of(X, Y) :-
parent_of(X, Y),
female(Y).
brother_of(X, Y) :-
male(Y),
parent_of(X, Z),
parent_of(Y, Z),
X \== Y.
sister_of(X, Y) :-
female(Y),
parent_of(X, Z),
parent_of(Y, Z),
X \== Y.
uncle_of(X, Y) :-
parent_of(X, Z),
brother_of(Z, Y).
aunt_of(X, Y) :-
parent_of(X, Z),
sister_of(Z, Y).
grandfather_of(X, Y) :-
parent_of(X, Z),
father_of(Z, Y).
grandmother_of(X, Y) :-
parent_of(X, Z),
mother_of(Z, Y).
?-
Tastează o interogare (ex. father_of(sandra, X).) și apasă Enter — sau apasă pe un caz de test de mai jos.
Cazuri de test (3 — apasă pe unul ca să îl rulezi, sau Verifică pentru toate)
?
father_of(sandra, sam).
așteptat: true
?
mother_of(sandra, elizabeth).
așteptat: true
?
grandmother_of(olivia, lisa).
așteptat: true