Dutch Royal Family — parent, ruler, predecessor
Pentru baza de cunoștințe din editor (mother/2, father/2, queen/1, king/1):
4a) Definiți următoarele predicate:
parent/2—parent(X, Y)să fietruecândXeste părinte al luiYruler(X)— să fietruecândXeste conducător
4b) Definiți un predicat predecessor/2, astfel încât predecessor(X, Y) să ne spună ierarhia de predecesori pentru un conducător X (vrem să răspundem, de fapt, la cine precede pe cine).
Hint pentru
predecessor: caz direct —Yeste părintele luiXși amândoi suntruler; caz recursiv —Xare un părinteZcare e și elruler, iarZare peYca predecesor.
Te-ai blocat?
editor
soluție
mother(wilhelmina,juliana).
mother(juliana,beatrix).
mother(juliana,christina).
mother(juliana,irene).
mother(juliana,margriet).
mother(beatrix,friso).
mother(beatrix,alexander).
mother(beatrix,constantijn).
mother(emma,wilhelmina).
father(hendrik,juliana).
father(bernard,beatrix).
father(bernard,christina).
father(bernard,irene).
father(bernard,margriet).
father(claus,friso).
father(claus,alexander).
father(claus,constantijn).
father(willem,wilhelmina).
queen(beatrix).
queen(juliana).
queen(wilhelmina).
queen(emma).
king(willem).
parent(X, Y) :- mother(X, Y).
parent(X, Y) :- father(X, Y).
ruler(X) :- king(X).
ruler(X) :- queen(X).
predecessor(X, Y) :- ruler(X), ruler(Y), parent(Y, X).
predecessor(X, Y) :-
ruler(X),
parent(Z, X),
ruler(Z),
predecessor(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)
?
parent(wilhelmina, juliana).
așteptat: true
?
ruler(beatrix).
așteptat: true
?
predecessor(beatrix, wilhelmina).
așteptat: true