% pt 7 %EX 1 :-dynamic(fib/2). fib(0,0):-!. fib(1,1):-!. fib(N,F):- N1 is N-1, N2 is N-2, fib(N1,F1), fib(N2,F2), F is F1+F2, asserta(fib(N,F):-!). % EX2 :- dynamic person/1, friend/2, group/2. person(jef). person(vero). person(tom). person(christian). person(pierre). friend(vero,tom). friend(vero,jef). friend(vero,christian). friend(tom,jef). friend(tom,pierre). group(g1,[tom,vero,jef]). group(g2,[vero,christian]). group(g3,[pierre]). remove_person(P):- retract(person(P)), %forall(friend(P,X),retract(friend(P,X))), %forall(friend(X,P),retract(friend(X,P))), retractall(friend(P,_)), retractall(friend(_,P)), forall((group(X,L),member(P,L)),(select(P,L,NL),retract(group(X,L)),asserta(group(X,NL)))). add_person(P,Friends,Groups):- asserta(person(P)), forall((member(F,Friends)),(asserta(friend(P,F)))), forall((member(G,Groups),group(G,L), not(member(P,L))),(select(P,NL,L),retract(group(G,L)),asserta(group(G,NL)))). friends(P,X):- friend(P,X);friend(X,P). mediator(P):- person(P), friends(P,F1), friends(P,F2), F2 \= F1, group(G1,L1), member(F1,L1), group(G2,L2), member(F2,L2), G2 \= G1.