Mini Prolog Version 1.5 (stack based) Reading stdlib........done > ?? append(nil,X,X). append(cons(X,Y),Z,cons(X,W)):==append(Y,Z,W). equals(X,X). not(X):==X,!,false. not(X). or(X,Y):==X. or(X,Y):==Y. true. > ?- append(cons(1,nil),cons(2,nil),X) X = cons(1,cons(2,nil)) ; no. > > ?- append(X,Y,cons(1,cons(2,nil))) X = nil Y = cons(1,cons(2,nil)) ; X = cons(1,nil) Y = cons(2,nil) ; X = cons(1,cons(2,nil)) Y = nil ; no. > > ?- append(cons(1,nil),cons(2,nil),cons(1,cons(2,nil))) yes. > ?- append(cons(1,nil),cons(2,nil),cons(1,cons(3,nil))) no. > parent(Child,Parent):==father(Child,Parent). > parent(Child,Parent):==mother(Child,Parent). > grandparent(GChild,Gparent):==parent(GChild,Parent),parent(Parent,Gparent). > father(charles,princePhilip). > mother(charles,theQueen). > father(anne,princePhilip). > mother(anne,theQueen). > father(andrew,princePhilip). > mother(andrew,theQueen). > father(edward,princePhilip). > mother(edward,theQueen). > mother(theQueen,theQueenMother). > father(william,charles). > mother(william,diana). > father(harry,charles). > mother(harry,diana). > ?- grandparent(X,theQueenMother) X = charles ; X = anne ; X = andrew ; X = edward ; no. > > ?- grandparent(harry,Who) Who = princePhilip ; Who = theQueen ; no. > > sibling(One,Tother) :== parent(One,X),parent(Tother,X). > ?- sibling(harry,Who) Who = william ; Who = harry ; Who = william ; Who = harry ; no. > > newsib(One,Tother) :== parent(One,X),!,parent(Tother,X). > ?- newsib(harry,Who) Who = william ; Who = harry ; no. > > newsib1(O,T):==parent(O,X),!,parent(T,X),not(equals(O,T)). > ?- newsib1(harry,Who) Who = william ; no. > > bye Thank you and goodbye