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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| % la base de données
% l'accesseur pour le nom
nom(personne(Nom, _Age, _Jeu), Nom).
% les jeux
jeu(jeuA).
jeu(jeuB).
jeu(jeuC).
jeu(personne(_Nom, _Age, Jeu), Jeu).
% les ages
age(5).
age(7).
age(9).
age(personne(_Nom, Age, _Jeu), Age).
% la base de règles
%
% règle 1
% "fernand est plus agé que luc"
regle1(X, Y) :-
nom(X, fernand),
age(X, AgeF),
age(AgeF),
% Y = personne(luc, AgeL, _),
nom(Y, luc),
age(Y, AgeL),
age(AgeL),
AgeF > AgeL.
% règle 2
% "Celui qui joue au jeu C à juste 7 ans
regle2(X) :-
age(X, 7),
jeu(X, jeuC).
% règle 3
% Paul joue au jeu A
regle3(X) :-
nom(X,paul),
jeu(X, jeuA).
% règle 4
% Paul n'est pas le plus jeune
regle4(X, Y, Z) :-
nom(X, paul),
age(X,AgeP),
nom(Y, luc),
age(Y, AgeL),
nom(Z, fernand),
age(Z, AgeF),
age(AgeF), age(AgeL), age(AgeP),
( AgeL < AgeP; AgeF < AgeP).
% regle 5 (implicite)
% Les enfants ont des jeux différents
regle5(X, Y, Z) :-
nom(X ,paul),
jeu(X, JeuP),
nom(Y, luc),
jeu(Y, JeuL),
nom(Z, fernand),
jeu(Z, JeuF),
jeu(JeuP), jeu(JeuL), jeu(JeuF),
JeuP \= JeuL,
jeuL \= JeuF,
JeuF \= JeuP.
%regle 6 (implicite)
% les enfants ont des âges différents
regle6(X, Y, Z) :-
nom(X ,paul),
age(X, AgeP),
nom(Y, luc),
age(Y, AgeL),
nom(Z, fernand),
age(Z, AgeF),
age(AgeP), age(AgeL), age(AgeF),
AgeP \= AgeL,
AgeL \= AgeF,
AgeF \= AgeP.
element_de(E, L) :-
member(E, L).
go :-
L = [X, Y, Z],
element_de(E1, L),
element_de(E2, L),
regle1(E1, E2),
element_de(E3, L),
regle2(E3),
element_de(E4, L),
regle3(E4),
element_de(E5, L),
element_de(E6, L),
element_de(E7, L),
regle4(E5, E6, E7),
element_de(E8, L),
element_de(E9, L),
element_de(E10, L),
regle5(E8, E9, E10),
regle6(E8, E9, E10),
writeln(X),
writeln(Y),
writeln(Z). |
Partager