You are on page 1of 27

Cours 4 Univers de Prolog : Prolog

Smantique Procdurale

Kaninda Musumbu
1 Dpartement

dInformatique Universit Bordeaux 1

K Musumbu

Langage PROLOG

Typage dynamique

Objectif Pour tester quelle catgorie appartient un terme, on utilise les prdicats prdnis suivants atom/1 : atom(X), atom(toto), var/1 :var(X), var(_), nonvar/1 : nonvar(x), nonvar(1), integer/1, float/1, ou number/1 atomic/1 : atomic(louis14), atomic(12). compound/1 compound(f(a,b)), compound(parent(louis13,X)).

K Musumbu

Langage PROLOG

Arithmtique en Prolog
Oprateurs manipuleent les expression arithmtiques : Expr1 = := Expr2 russit si les valeurs des deux expressions numriques sont gales. Expr1 == Expr2 russit si les valeurs des deux expressions atomiques sont gales. Expr1 =\= Expr2 russit si les valeurs des deux expressions numriques sont diffrentes. Expr1 \== Expr2 teste lingalit des deux expressions atomiques sont diffrentes. Expr1 < Expr2 russit si les valeurs Expr1 est strictement infrieure celle de Expr2. Expr1 =< Expr2 russit si la valeur de Expr1 est infrieure ou gale celle de Expr2. Expr1 > Expr2 russit si ls valeurs Expr1 est strictement suprieure celle de Expr2.
K Musumbu Langage PROLOG

Arithmtique en Prolog

Remarque Pour chacun de ces prdicats, si une des deux expressions nest pas valuable Prolog retourne un message derreur.

K Musumbu

Langage PROLOG

Prdicat is/2

R is Expr russit si Expr sunie avec R. ce prdicat sert gnralement laffectation dune variable Exemple X is 2+3 = X == 5 X is Y+1 = X == Y + 1, si Y est li sinon erreur Attention 2+3 is 5 choue. Pourquoi ?

K Musumbu

Langage PROLOG

Prdicat is/2

Exemple factorielle(0,1). factorielle(X,Y) :X1 is X - 1, factorielle(X1,Y1), Y is Y1 * X.

K Musumbu

Langage PROLOG

Smantique Procdurale

Principe le moteur de rsolution vue comme une bote noire : reoit en entre une question et produit en sortie soit un chec soit un succs constitu par un ensemble de substitutions. on ne peut pas calculer MP par lapproche ascendante : car trop couteux, voire inni. En revanche, on utilise une approche descendante, dite en chanage arrire.

K Musumbu

Langage PROLOG

Backtracking

Principe Lorsque Prolog ne peut pas trouver de clause pour rcrire T1 il backtrack pour explorer un autre chemin de rsolution. Il le fait aussi lorsquil a obtenu une rsolvante vide (une solution) pour fournir les autres solutions potentielles.

K Musumbu

Langage PROLOG

SLD-Rsolution : arbre de drivation

big(bear). big(elephant). small(cat). brown(bear). black(cat). dark(Z) dark(Z) ::black(Z). brown(Z).

But1 : ?-dark(X),big(X). But2 : ?-big(X), dark(X).

K Musumbu

Langage PROLOG

Terme particulier : la Liste


Dnition terme compos particulier de symbole de fonction . et darit 2 le premier argument est llment de tte de la liste, et le deuxime argument est la queue de la liste. La liste vide est note []. Notations : la liste .(X,L) est galement note [X|L] , la liste .(X1, .(X2, L)) est galement note [X1, X2|L], la liste .(X1, .(X2, ..., .(Xn, L) ... )) est galement note [X1, X2, ..., Xn|L], la liste [X1, X2, X3, ..., Xn|[]] est galement note [X1, X2, X3, ..., Xn].
K Musumbu Langage PROLOG

Principe : Algorithme de la rsolution

Une question est une rsolvante (conjonction de termes). La cardinalit dune rsolvante est le nombre de termes qui la compose. La rgle T :- Q. tablit que T peut tre remplac par Q. et T. se remplace par Prolog fonctionne de gauche droite et en profondeur dabord Il choisit donc de rcrire le terme T1 et place sa rcriture en tte de la nouvelle rsolvante La substitution i obtenue pour unier T1 avec la tte de la rgle choisie est applique Ri +1

K Musumbu

Langage PROLOG

Structure rcursive

Traitement La dnition rcurrente des listes conduit une analyse en deux cas : liste vide et liste non vide une dcomposition premier/n . La n dune liste correspondant la liste prive de son premier lment.

K Musumbu

Langage PROLOG

Manipulation de liste

Longueuer dune liste : longueur([],0). longueur([_| L], N) :longueur(L,N1), N is N1 +1.

Concatnation de deux listes : concat([],Y,Y). concat([X|L],B, [X|R]) :concat(L,B,R).

K Musumbu

Langage PROLOG

Contrle du Backtracking 1/4

Remarque Prolog backtrack automatiquement quand cest ncessaire pour satisfaire un but. Ce concept libre le programmeur de devoir explicitement dcrire au systme le retour arrire. Le fait de nest pas contrl le backtracking, peut rendre le programme inefcace.

K Musumbu

Langage PROLOG

Contrle du Backtracking 2/4

Exemple Soit le prdicat qui tablit la relation entre la concentration de polluant et le niveau dalerte. niveau(X, normal) :- X < 3. /* regle 1 */ niveau(X, alert1) :- X >=3, X < 6. /* regle 2 */ niveau(X, alert2) :- X >= 6. /* regle 3 */ Considrons le but ?-niveau(2,Y), Y= alert1.

K Musumbu

Langage PROLOG

Contrle du Backtracking 3/4


Une analyse attentive montre que les trois clauses sont mutuellement exclusives. Do lune seule dentre elle au plus peut reussir ! Donc, du moment o lune delle a reussi, il est inutile daller tester les autres. "CUT" ( note !), est un prdicat qui signie Prolog de nest pas tenter les autres alternatives en cas dchec. Exemple niveau(X, normal) niveau(X, alert1) niveau(X, alert2)
1 2

:::-

X < 3, ! . X >=3, X < 6, ! . X >= 6.

/* regle 1 */ /* regle 2 */ /* regle 3 */

Considrons le but ?-niveau(2,Y), Y= alert1. Comment se comporte la dernire version du programme pour ?-niveau(7,Y).
K Musumbu Langage PROLOG

Contrle du Backtracking 4/4

Simplication On obtient une version correcte et efcace en supprimant les conditions dont on est certain quelles sont vraies. Exemple niveau(X, normal) niveau(X, alert1) niveau(X, alert2). ::X < 3, ! . X < 6, ! . /* regle 1 */ /* regle 2 */ /* regle 3 */

K Musumbu

Langage PROLOG

Le CUT : coupe choix

Intrt contrle dynamique du bactrack PROLOG. affecte le comportement procdural des programmes : lagage dynamique de larbre de recherche. efcacit accrue des programmes, le cut empche de remettre en cause tous les choix qui ont t faits avant. n affecte en rien la faon dont sont rsolus les butes aprs le cut. le cut est un prdicat qui russit toujours et qui ne russit quune fois.

K Musumbu

Langage PROLOG

Exercices

Soit P , le programme suivant : p(1). p(2) :- !. p(3). Donner toutes les rponses de Prolog selon les questions suivantes :
1 2 3

?-p(X). ?-p(X),p(Y). ?-p(X),!,p(Y).

K Musumbu

Langage PROLOG

Prdicats prdnis 1/4


Prdicat de Contrle cut qui contrle le retour arririre de Prolog fail prdicat qui choue toujours. true prdicat qui russie toujours. not(P) ngation par dfaut, not(P) :- P, !,fail ; true. call(P) invoque le but P, il reussie si P reussie. repeat prdicat qui russie toujours, sa particularit est chaque appel, il gnre une nouvelle branche. carre :- repeat, read(X), (X=stop, ! ; Y is X * X, write(Y),fail).
K Musumbu Langage PROLOG

Prdicats prdnis 1/4


Entre - Sortie nl saut de ligne tab(N) N espace get(C) lit un caractre et lunie C read(T) lit un terme et lunie T write(T) afche un terme writef(Format,L) afche selon le format spci Format

K Musumbu

Langage PROLOG

Manipulation des Termes Composs

Exemple

K Musumbu

Langage PROLOG

Manipulation des Termes Composs


Prdicats donnant accs functor(Term,F,Arity) : au nom du foncteur et son arrit arg(N,Term,Arg) : un argument sachant sa position Term =.. [F,Arg] : aux arguments dun terme compos Exemple funtor(pere(abraham,issac),X,N) X=pere, N=2 funtor(issa,X,N) X=issa , N=0 arg(1,pere(abraham,issac),Arg) Arg=abraham pere(abraham,issac)=..[F| Arg] - F=pere, Arg=[abrahm,issac] Term=..[g,a,bd] Term=g(a,bd)

K Musumbu

Langage PROLOG

Structures de donnes : Graphe


Dnitions Un graphe est un triplet (V , E , ), o V est un ensemble dobjets appels les sommets du graphe, E est un ensemble dobjets appels les artes du graphe et est une fonction : V P (E ) telle que e E , |{s V , e (s)}| {1, 2}. Deux sommets sont adjacents si ils sont relis par une arte Le degr dun sommet s, not d (s), est le nombre de brins dartes ayant s comme extrmit. Reprsentation par une relation binaire r(1,2) sil existe un arc entre 1 et 2. Remarque On peut alors dterminer sil existe un chemin de longueur n Langage PROLOG entre les sommets x et K yMusumbu .

Graphe non orient : explicite

Exemple FAITS adjacent(1,2). adjacent(1,3). adjacent(1,4). adjacent(1,5). adjacent(4,5). REGLES adjacent(X,Y) :- adjacent(Y,X). adjacent(2,3). adjacent(2,4). adjacent(3,4).

K Musumbu

Langage PROLOG

Graphe non orient : synthtique

Exemple adjacent(2,4). adjacent(4,2).

adjacent(1,X) :- between(2,5,X). adjacent(X,1) :- between(2,5,X).

adjacent(X,Y) :-between(2,4,X),Y is X+1. adjacent(Y,X) :-between(2,4,X),Y is X+1.

K Musumbu

Langage PROLOG

Structures de donnes : Automate

Dnition 1 Un automate ni A = (, Q , qo , F , ), correspond un graphe orient, dans lequel certains des noeuds (tats) sont distingus et marqus comme initial ou naux et dans lequel les arcs (transitions) sont tiquets par des symboles de . Si (q , a) = r on dit que a est ltiquette de la transition (q , r ). Dnition 2 Un automate est une machine qui change dtats sous leffet de transitions.

K Musumbu

Langage PROLOG

You might also like