0% ont trouvé ce document utile (0 vote)
183 vues15 pages

Cours3 Les Listes

Ce document présente un cours sur la programmation logique avec Prolog. Il décrit les objectifs du cours, son organisation, son plan et sa bibliographie. Il aborde ensuite des chapitres sur les listes, les matrices et les arbres en Prolog.

Transféré par

Chergui Oussama
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
183 vues15 pages

Cours3 Les Listes

Ce document présente un cours sur la programmation logique avec Prolog. Il décrit les objectifs du cours, son organisation, son plan et sa bibliographie. Il aborde ensuite des chapitres sur les listes, les matrices et les arbres en Prolog.

Transféré par

Chergui Oussama
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 15

Cours de programmation logique

Prolog
Rahim Messaoud
[email protected]

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 : [email protected]/[email protected]
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

Vous aimerez peut-être aussi