Vous êtes sur la page 1sur 15

Les listes

 Exemple:
[amina,nadia,souad].
[amina,nadia,mere(hassan)].
 Syntaxe d’une liste :
 [Tete | Reste].
Où « Tete» est le premier élément de la liste et « Reste » une liste de tous les
autres éléments.
Exemple 1: ?-[A| B] = [amina,nadia,souad].
A = amina
B=[nadia,souad].
Exemple 2: ?-[X,Y | W] = [amina,nadia,souad,mere(hassan)].
X = amina
Y = nadia
W =[souad,mere(hassan)].
Les Listes
2

Exemple 3:
?-[ _ , _ , [ _ | X] | _] = [ [] , g , [2 , [s,t]] , [] , f , [1 , [a,l]]].
X=
Exemple 4: construire un prédicat qui vérifie si un élément est dans une
liste.
%X est en tete de la liste
appartient_a_liste(X,[X|_]).
%X est dans le reste de la liste
appartient_a_liste(X,[_|B]) :- appartient_a_liste(X,B).
?-appartient_a_liste(2,[3,4,2,5]).
Exemple 5:
?-appartient_a_liste(X,[23,25,67,12,9,6]),Y is X*X, Y<400.
X=
Les listes : prédicats prédéfinis
3

 length: donne la longueur d’une liste ou crée une


liste d’une certaine longueur en y insérant des
variables libres.
 Exemple : ?-length([2,3,4,5],X).
X=4
 nth0: donne l’élément à la ième position.
 Exemple : ?-nth0(2,[1,6,3,5],X).
X=3
 Exemple: ?- length(L,5), nth0(1, L, 8888).
L = [_G444, 8888, _G450, _G453, _G456]
Les listes : prédicats prédéfinis
4

 numlist : crée des intervalles de valeurs entières.


Exemple : ?- numlist(2,8,Z).
Z= [2, 3, 4, 5, 6, 7, 8]
 reverse : inverse l'ordre des éléments de List1 et
unifie le résultat dans List2.
Exemple : ?- reverse([1,2,3,4,5], L2).
L2 = [5, 4, 3, 2, 1]
 append : ajoute le contenu de List2 à la suite de List1
et unifie le résultat dans List3.
Exemple : ?- append([1,2,3], [4,5,6], L3).
L3 = [1, 2, 3, 4, 5, 6]
Les listes : prédicats prédéfinis
5

 permutation : permet d'énumérer toutes les


permutations possibles d’une liste.
Exemple : ?- permutation([1,2,3], Perm).
Perm = [1, 2, 3] ;
Perm = [2, 1, 3] ;
Perm = [2, 3, 1] ;
Perm = [1, 3, 2] ;
Perm = [3, 1, 2] ;
Perm = [3, 2, 1] ;
false
Les listes : prédicats prédéfinis
6

 member : réussit si l’élément coïncide avec un


élément de la liste.
Exemple : ?- member(5, [1,2,3,5,8]).
true
 msort : trie une liste.
 sublist : extrait tous les éléments de List1 pour
lesquels la condition réussit et affiche le reste des
éléments dans List2.
Exemple : ?- sublist( <(5), [15,2,8,5,6,9,4], L ).
L = [15, 8, 6, 9]
Listes - négation par échec
7

 fail est un prédicat prédéfini qui produit un échec. Il


permet d’exprimer une phrase comme:
aime(nadia,serpent) :- ! , fail .
aime(nadia,X) :- animal(X) .
L’ordre des règles doit être respecté.
Listes - affichage
8

 Le prédicat findall, permet d'obtenir une liste de


toutes les solutions d'un prédicat.
Exemple: ?-findall(X,pere(leon,X),R).
R=[henri,elizabeth].
 Le prédicat bagof se comporte comme findall, à la
différence que bagof échoue si le but n'a pas de
solution (alors que findall donne [] comme solution).
 Le prédicat setof se comporte comme bagof, à la
différence que bagof ne supprime pas les doublons.
9

 La fonction write permet d’afficher du texte.


Exemple: ?-write(‘Bonjour’).
 La fonction writeln permet de revenir à la ligne.
 Les opérateurs :

+(X) Plus X float(X) Entier le plus proche


-X Moins X de X compris entre 0 et X
X+Y Addition X=Y Unification
X-Y Soustraction X==Y Egal
X*Y Produit X\==Y Différent
X/Y Division (flottant) X<Y Inférieur
X//Y Division entière X>Y Supérieur
X mod Y Modulo (reste de la X=<Y Inférieur ou égal
division entière) X>=Y Supérieur ou égal
Les arbres binaires
10

 Les arbres, comme les listes, permettent de


représenter un nombre variable de données
 Contrairement aux listes, les arbres permettent de
ranger les données selon un ordre.
 Exemple : les arbres généalogiques
Exemple – arbre binaire
11
Définition
12

 Un arbre est un ensemble constitué d’un élément (la


racine) et des sous-arbres qui lui sont directement
associés.
 Chaque élément de l’arbre est appelé un nœud.
 Un nœud est le père de ses fils et le degré d’un nœud
est le nombre de ses fils.
 On distingue :
 les nœuds non terminaux de degré non nul
 les nœuds terminaux ou feuilles, de degré nul.
Définition
13

 Un arbre binaire est un arbre ordonné pour lequel


tout nœud a au plus 2 fils.
 Un arbre binaire est un ensemble fini qui est soit
vide, soit composé d’une racine et de deux sous-
arbres binaires appelés sous-arbre gauche et sous-
arbre droit.
Représentation des arbres binaires sous Prolog
14

 Un arbre vide est représenté par la liste vide [].


 Un nœud est une liste de 3 éléments (triplet):
 le premier est sa valeur
 le deuxième son sous-arbre gauche
 le troisième son sous-arbre droit
Exemple d’arbre binaire sous Prolog
15