1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| app(X, [X | _]).
app(X, [_ | L]) :- app(X, L).
ret(X, [X|L], L).
ret(X, [Y|L], [Y| R]) :- ret(X, L, R).
assoc(U, V, U, V). % en fait la seconde clause est inutile
assoc(X, Y, U, V) :- X \== U, Y \== V.
sup(X, Y) :- X > Y.
superieur(X,Y,[ass(I, A, J) | LR]) :- X == fernand, I == luc, Y > A.
superieur(X,Y,[ass(I, A, J) | LR]) :- X == luc, I == fernand, Y < A.
superieur(X,Y,[ass(I, A, J) | LR]) :- superieur(X,Y,LR).
imp(U, V, U, V) :- !, fail.
imp(_, _, _, _).
%Autre solution assoc(X, Y, A, B) :- (X == A, Y == B); (X \== A, Y \== B).
%imp(X, Y, A, B) :- X \== A ; Y \== B.
donnees([ass(luc, _, _),ass(paul, _, jeuA), ass(fernand, _, _)]).
jeu(D) :- donnees(D), assigner(D, [5, 7, 9], [jeuA, jeuB, jeuC]).
assigner([], _, _).
assigner([ass(I, A, J) | LR], LA, LJ) :- app(A, LA),
app(J, LJ),
assoc(J, A, jeuC, 7),
imp(I, A, paul, 5),
imp(I, A, luc, 9),
ret(A, LA, LAR),
ret(J, LJ, LJR),
assigner(LR, LAR, LJR). |
Partager