Prolog Exercise Sample Solution
member([],_) :- fail.
member([Sought|_],Sought).
member([_|Rest], Sought) :- member(Rest,Sought).
male(a).
male(c).
male(f).
male(h).
male(j).
male(k).
male(o).
female(b).
female(d).
female(e).
female(g).
female(i).
female(l).
female(m).
female(n).
parent(e,a).
parent(e,b).
parent(e,c).
parent(e,d).
parent(f,a).
parent(f,b).
parent(f,c).
parent(f,d).
parent(i,f).
parent(j,f).
parent(g,e).
parent(g,k).
parent(g,l).
parent(h,e).
parent(h,k).
parent(h,l).
parent(l,m).
parent(l,n).
parent(l,o).
mother(X,Y) :- female(X), parent(X,Y).
father(X,Y) :- male(X), parent(X,Y).
grandmother(X,Y) :- mother(X,Z), parent(Z,Y).
grandfather(X,Y) :- father(X,Z), parent(Z,Y).
allgp(X) :- grandmother(Y,X), write(Y), nl, fail.
allgp(X) :- grandfather(Y,X), write(Y), nl, fail.
sibling(X,Y) :- mother(Z,X), mother(Z,Y), X \= Y.
sibling(X,Y) :- not(mother(A,X)), not(mother(A,Y)),
father(Z,X), father(Z,Y), X \= Y.
allsibs(X) :- sibling(Y,X), write(Y), nl, fail.
aunt(X,Y) :- female(X), sibling(Z,X), parent(Z,Y).