CONSTANTS tt="Family Tree" DOMAINS h=symbol % h stands for human hl=h* % list of humans; defined to support this kind of queries: findall(P,p(P,i),LP) where i is an input symbol. PREDICATES mama(h,h) % (mama,copil) tata(h,h) % (T,C) sora(h,h) % (F,O) frate(h,h) % (M,O) ssf(h,h) % sora sau frate bunici(h,h) % (B,N) bunic(h,h) % (B,N) bunica(h,h) % (B,N) cuplu(h,h) % (M,F), (F,M) unchi(h,h) % (U,N) matusa(h,h) % (M,N) predecesor(h,h) % (P,C) succesor(h,h) % (S,C) % cel mai indepartat predecesor cmip(h, h) % (CMIP,C) % cel mai indepartat succesor cmis(h,h) % (CMIS,C) rudes(h,h) rudea(h,h) DATABASE p(h,h) % parinte(P,C) f(h) % feminin m(h) % masculin soti(h,h) %GOAL %write(tt),nl,write("Mama Tatianei este: "),mama(X,tatiana),write(X),nl. CLAUSES % (*,*) all tata(T,C):-p(T,C),m(T). mama(M,C):-p(M,C),f(M). frate(F,X):-tata(T,F),tata(T,X),X<>F,m(F). sora(S,X):-tata(T,S),tata(T,X),X<>S,f(S). ssf(X,Y):-sora(X,Y);frate(X,Y). bunici(B,N):-p(P,N),p(B,P). bunic(B,N):-bunici(B,N),m(B). bunica(B,N):-bunici(B,N),f(B). cuplu(X,Y):-soti(X,Y);soti(Y,X). unchi(U,N):-p(P,N),frate(U,P). matusa(M,N):-p(P,N),sora(M,P). % (o,i),(i,i) % (i,o),(o,o) predecesor(PR,S):-p(PR,S); p(P,S),predecesor(PR,P). % (o,i),(i,i) % (i,o),(o,o) succesor(S,P):-predecesor(P,S). % cel mai indepartat predecesor % (o,i),(i,i) % (i,o),(o,o) cmip(CMIP,D):-predecesor(CMIP, D),not(predecesor(_,CMIP)). % cel mai indepartat succesor % (o,i),(i,i) % (i,o),(o,o) cmis(CMIS,X):-succesor(CMIS, X),not(succesor(_,CMIS)). % (i,i),(i,o),(o,i),(o,o) rudes(X,Y):-cmip(Y,X); cmip(X,Y); cmip(Z,X),predecesor(Z,Y),X<>Y; cmip(Z,Y),predecesor(Z,X),X<>Y. % (i,i),(i,o),(o,i),(o,o) rudea(X,Y):-cuplu(X,Y); cuplu(X,A),rudes(Y,A),not(succesor(Y,A)); cuplu(A,Y),rudes(X,A),not(succesor(X,A)); cuplu(A,B),rudes(X,A),rudes(Y,B),not(succesor(X,A)),not(succesor(Y,B)). % FACTS: m(ion). m(adrian). m(alex). m(vasile). m(nicu). m(gelu). m(alin). m(david). f(anda). f(cati). f(tatiana). f(ana). f(maria). % p(P,C) p(george,ion). p(ion,adrian). p(ion,tatiana). p(adrian,anda). p(cati,tatiana). p(cati,adrian). p(tatiana,alex). p(tatiana,gelu). p(tatiana,maria). p(nicu,alex). p(nicu,gelu). p(nicu,maria). p(vasile,nicu). p(ana,nicu). p(alin,david). % soti(M,F) soti(ion,cati). soti(vasile,ana). soti(nicu,tatiana).