La Programmation Logique: PROLOG Aline Deruyver IUT Robert Schuman
Plan Introduction Les premiers programmes PROLOG Historique Différences avec les autres langages Les premiers programmes PROLOG Les 2 parties d ’un programme Un programme avec variables Le raisonnement PROLOG Présentation de l ’exemple détails du raisonnement (arbre de raisonnement) Les principes
Plan L ’unification Le CUT Introduction aux listes définition Exemples Le CUT et la négation Le CUT pour sélectionner une règle Introduction aux listes Définition Etude du prédicat appartient
Le premier programme PROLOG ?- lire. /*question ou but*/ /*Règle 1*/ lire :- write("donner un entier"), read(X), nl, write("votre entier est"), write(X), nl.
Une petite base de données /*faits*/ personne(germaine, 85). personne(émile, 63). personne(léon, 35). personne(lucie, 27). personne(louis, 40). personne(pauline, 9). personne(jean, 1). personne(luc, 27). /Règles*/ individu(X) :- personne(X,_). Majeur(X) :- personne(X,Y), Y>=18. Mineur(X) :- personne(X,Y), Y<18. Meme_age(X,Y) :- personne(X,Z), personne(Y,Z), X =\= Y.
Le raisonnment PROLOG Le programme « HUMEUR » /*but*/ ?- est_de_bonne_humeur(X), write(X). /*Faits*/ a_de_largent(jean). a_de_largent(alain). on_est_en(juillet). reussit_dans_le_travail(jean). reussit_dans_le_travail(alain). reussit_dans_sa_famille(alain). /*Règle1*/ est_en_vacances(jean) :- on_est_en(aout).
Le raisonnment PROLOG Le programme « HUMEUR » /*Règle2*/ est_en_vacances(alain) :- on_est_en(juillet). /*Règle3*/ il_y_a_du_soleil :- on_est_en(aout). /*Règle 4*/ est_de_bonne_humeur(X) :- a_de_largent(X), est_en_vacances(X), il_y_a_du_soleil. /*Règle5*/ est_de_bonne_humeur(X) :- reussit_dans_le_travail(X), reussit_dans_sa_famille(X).
L ’unification bibliothèque(l(a(de_closets, francois), toujours_plus, c(grasset,1982)), jean). bibliothèque(l(a(borges, jorge_louis), enquêtes, c(gallimard,1957)), jean). bibliothèque(l(a(hugo, victor), les_misérables, c(_,2002)), jean). bibliothèque(l(a(foucault, michel), naissance_de_la_clinique, c(puf,1963)), pierre). bibliothèque(l(a(hugo, victor), _, c(livre_poche,2002)), pierre).
Utilisation du CUT /*R1*/ /*faits*/ a(X,Y) :- b(X),c(Y). c(10). /*R2*/ e(1). e(2). f(100). /*R1*/ a(X,Y) :- b(X),c(Y). /*R2*/ a(X,Y) :- d(X,Y). /*R3*/ b(X) :- e(X), !. /*R4*/ b(X) :- f(X).
Utilisation du CUT b(1). b(2). c(10). c(20). d(100). d(200). e(1000). a(X1,X2,X3,X4) :- b(X1), c(X2), !, d(X3), e(X4).
Le CUT pour sélectionner une règle max1(X,Y,M) :- X=<Y, M:=Y. max1(X,Y,M) :- X>Y, M:=X. max2(X1,X2,M) :- X1=<X2, !,M:=X2. max2(X1,X2,M) :- X1>X2, M:=X1. max3(X1,X2,M) :- X1=<X2,!, M:=X2. max3(X1,_,M) :- M:=X1. max4(X1,X2,X2) :- X1=<X2,!. max4(X1,_,X1).
Introduction aux listes appartient(E, [E|_]). appartient(E, [_|L]):-appartient(E,L). longueur([],0). longueur([_|L], N) :- longueur(L,NN), N:=NN+1. concate([],L2,L2). concate([E|L],L2,[E|LLL]):- concate(L,L2,LLL).
La database ajout():- write("nom:"), read(N), write("prenom"), read(P), assert_in(personne(N,P)). supprimer():- write("nom:"), read(N), write("prenom"), read(P), retract_in(personne(N,P)).