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
| /* ================================================= */
/* LANGAGE */
/* ================================================= */
predicats([(vole,1),(oiseau,1),(leger,1),(couple,2)]).
constantes([1,2]).
variables([x, y, z ,t]).
/* ================================================= */
/* FAITS */
/* ================================================= */
vole(1).
oiseau(1).
non(leger(1)).
/* ================================================= */
/* REGLES */
/* ================================================= */
%leger(X):- vole(X).
creer_atome_libre(Atome):-
predicats(LP),
member((Predicat,Arite),LP),
creer_variables(Arite,Lvariables),
Atome=..[Predicat|Lvariables].
creer_variables(0,[]):-
!.
creer_variables(N,[_|Lv]):-
N1 is N-1,
creer_variables(N1,Lv).
construire_atomes_libres(LAL):-
findall(Atome, creer_atome_libre(Atome), LAL).
atome_herbrand(A):-
construire_atomes_libres(LA),
member(A,LA),
instancier_terme(A).
instancier_terme(A):-
A=..[Pred|Larguments],
instancier_liste(Larguments),
A=..[Pred|Larguments].
instancier_liste([]).
instancier_liste([X|L]):-
constantes(LC),
member(X,LC),
instancier_liste(L).
construire_base_Herbrand(LBH):-
findall(A, atome_herbrand(A), LBH),
asserta(base_Herbrand(LBH)).
construire_faits_positifs(P) :-
findall(Atome, fait_positif(Atome), P),
asserta(faits_positifs(P)).
fait_positif(Atome) :-
base_Herbrand(LBH),
member(Atome, LBH),
Atome.
construire_faits_negatifs(N) :-
findall(Atome, fait_negatif(Atome), N),
asserta(faits_negatifs(N)).
fait_negatif(Atome) :-
base_Herbrand(LBH),
member(Atome, LBH),
non(Atome).
construire_faits_incertains(I) :-
findall(Atome, fait_incertain(Atome), I),
asserta(faits_incertains(I)).
fait_incertain(Atome) :-
base_Herbrand(LBH),
faits_positifs(LP),
faits_negatifs(LN),
member(Atome, LBH),
\+ member(Atome,LP),
\+ member(Atome,LN). |
Partager