Vous êtes sur la page 1sur 15

Cours de programmation logique

Prolog
Rahim Messaoud
Rahim.messaoud@univ-medea.dz

2015/2016
Objectifs du cours
Objectifs thoriques
Apprendre un nouveau mode de programmation la
programmation logique .
Apprendre la syntaxe et la smantique de Prolog.
Utiliser Prolog pour rsoudre des problmes de
programmation.
Objectifs pratiques
Mettre en pratique les concepts de programmation logique.
Dvelopper des programmes Prolog.
Organisation du cours
1 Cours + 1 TP/semaine
Transparents et informations diverses sur la plateforme de
tl-enseignement de luniversit de Mda.
Mail : Rahim_mes@yahoo.fr/rahim.messaoud@univ-medea.dz
Plan du cours
Introduction la programmation logique et Prolog
Les bases du langage Prolog
Aspects avancs du langage Prolog
Les listes en Prolog
Les arbres en Prolog
Bibliographie
W.F. Clocksin, C.S. Mellish, Programmer en Prolog .
Editions Eyrolles 1985
Hoogger, Programmer en logique . Masson, 1987
CONDILLAC, Prolog : Fondements et Applications .
Editions Masson.
Les fondements de la programmation en logique de J. W. Lloyd
Prolog de F. Giannesini, H. Kanoui, R. Pasero et M. Van
Caneghem
Chapitre 3:
Les listes enProlog
Plan
Dfinition
Notations
Manipulation de listes
Applications
Dfinition
Une liste en prolog est un terme compos.
Le symbole de fonction . darit 2 est le symbole de
composition.
Le premier argument est llment de tte de la liste, et le
deuxime argument est la queue (le reste) de la liste.
A une suite, ordonne ou non, on associe la liste de ses
lments.
Exemples:
suite {e1, e2, } ==> liste (e1.(e2.()))
suite des variables X et Y ==> (X.Y)
suite {gateau, fruit, glace} ==>(gateau.(fruit.glace))
8 Concepts algorithmiques
Notations
La liste vide est note nil . Elle sert souvent marquer
la fin de liste. Elle est galement note [] .
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, , Xn| []] est galement note
[X1, X2, , Xn].
Remarques
[1,2,3] et [2,1,3] sont deux listes diffrentes.

9 Concepts algorithmiques
Manipulation des listes
Prdicat membre : membre (X, L) est vrai, si X est un lment de L.
membre(X,[X|_H]).
membre(X,[_Y|H]) :- membre(X,H).
Prdicat longueur : il sagit de retourner le nombre dlments contenant
dans une liste;
longueur([],0).
longueur([_|L],N):-longueur(L,N1), N is N1+1.
Prdicat concat : concat(L1, L2, L3) est vrai, si L3 est la concatnation des
deux listes L1 et L2.
concat([], L, L).
concat( [A|S], L, [A|R]) :- concat(S, L, R).

Remarque
attention ! concat boucle quand on l'appelle avec son premier
et son troisime paramtres variables libres
! i.e. ne demandez donc jamais concat(X, [a, b, c], Y) !

10 Concepts algorithmiques
Applications
Prdicat membre : membre (X, L) est vrai, si X est un lment de L.
membre(X,[X|_H]).
membre(X,[_Y|H]) :- membre(X,H).
Prdicat longueur : il sagit de retourner le nombre dlments contenant
dans une liste;
longueur([],0).
longueur([_|L],N):-longueur(L,N1), N is N1+1.
Prdicat concat : concat(L1, L2, L3) est vrai, si L3 est la concatnation des
deux listes L1 et L2.
concat([], L, L).
concat( [A|S], L, [A|R]) :- concat(S, L, R).

Remarque
attention ! concat boucle quand on l'appelle avec son premier
et son troisime paramtres variables libres
! i.e. ne demandez donc jamais concat(X, [a, b, c], Y) !

11 Concepts algorithmiques
Les Matrices
Une matrice de taille nxn peut tre reprsente par des listes de
listes sur n niveaux
Exemple
1 2 3
M= 4 5 6 [[1,2,3], [4,5,6], [7, 8, 9]]
7 8 9

Exercice
Retournez le maximum dune liste dentier (max(L, M))
max([X], X).
max([X,Y|L], X) :-max([Y|L], M), X>=M.
max([X,Y|L], M) :-max([Y|L], M), M>X.

12 Concepts algorithmiques
Les arbres
Arbre binaire
Reprsentation
Un arbre vide sera reprsent par la liste vide [].
Un nud sera reprsent par une liste de 3 lments :
Le premier est sa valeur (R) Nud [R,G,D]
Le deuxime son fils gauche (G) ou
Nud [R|[G,D]]
Le troisime son fils droit (D)
Exemple
6
[6,[4,[1,[],[]],[8,[],[]]],[9, [],[]]]
4 9
[6|[[4|[1,8]],9]]
1 8

13 Concepts algorithmiques
Les arbres
Oprations
Somme des valeurs binaires : Somme(L,N) est vrai si N est
la somme de toutes les valeurs de larbre reprsent par la liste L.
somme([], 0).
somme([R,G,D], N) :-somme(G, N1), somme(D, N2),
N is R+N1+N2.
Ajout 1 tous les nuds dun arbre
ajout1([], []).
ajout1([R,G,D], [R1, G1, D1]) :-R1 is R+1,
ajout1(G, G1), ajout1(D, D1).

Exercice : crire les prdicats qui permettent de parcourir un


arbre en profondeur et en largeur.
14 Concepts algorithmiques
Les arbres
Arbre de recherche binaire (ARB) : Pour tout nud r de ARB,
pour tout nud g appartenant au fils gauches de r et pour tout nud
d appartenant au fils droit de r : gr<d
Oprations
Vrification si un arbre donn est un ARB
arb([]).
arb([R]).
arb([R,G,D]):-arb(G), G\=[], max(G)<=R, arb(D),
D\=[], R<min(D).

Minimum dun ARB


min([R], R).
min([R,[],_], R).
min([_,G,_],M) :-G\=[], min(G, M).

15 Concepts algorithmiques