57 lines
1.2 KiB
Prolog
57 lines
1.2 KiB
Prolog
% 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.
|
|
|