Vous êtes sur la page 1sur 16

Listes et graphes

1
Listes

2
Définition
Les Listes sont des structures de données de base en ProLog.
Syntaxe:
• L [ Tête | Queue ] est la liste où le premier élément est Tête et le
reste de la Liste est Queue
• L [ a,b,c,3,’ISI' ] est une liste de constantes
• L [ ] est La Liste vide

3
Exemples
• [X|L] = [a,b,c]. donne True {X=a,L=[b,c]}
• [X|L] = [a]. donne True {X=a,L=[]}
• [X|L] = []. donne False
• [X,L] = [a,b,c]. donne False
• [X,Y|L] = [a,b,c]. donne True {X=a,Y=b,L=[c]}
• [X|L] = [A,B,C]. donne True {X=A, L=[B,C]}

4
Les listes imbriquées
Exemples:
• [X|L]= [a,[]]. donne True {X=a,L=[[]]}
• [X|L]= [a,[b,c],d]. donne True {X=a,L=[[b,c],d]}
• [X]= [a|[]]. donne True {X=a}
• [X,Y|L]= [a|[b|[]]]. donne True {X=a, Y=b}
• [X,Y|L]= [a|[[b]]. donne True {X=a, Y=b}
• [X,a]= [b,Y]. donne True {X=b, Y=a}
5
Les fonctions (1/6)
Length: Calcul la longueur d'une liste:
Syntaxe:length(list,integer)
Le deuxième argument est la longueur de la liste passée en premier argument
(length est prédéfini)
Exemple:
• length([],0).
• length([_|Y],N) :- length(Y,N2).
(avec N = N2 + 1)
6
Les fonctions (2/6)
member: permet de tester l’appartenance d’un élément à une liste,
Syntaxe: member(term,list)
Donne vrai si le premier argument est membre de la liste passée en deuxième
argument (member est prédéfini).
Exemples :
• member(e,[a,b,e]). donne true
• member(R,[a,b,[c]]). donne true {R=a} ou {R=b} ou {R=[c]}
• member(e,L). donne true {L=[e|_]} ou {L=[_,e|_]} ...
• membre(b,[a, b, c]) et membre([b, c],[a, [b, c]]) sont vrais.
• membre(b,[a, [b,c]]) est faux. 7
Les fonctions prédéfinies(3/6)
• On peut observer que X est un membre de L,
• si estX est le premier élément de L (cas de base), ou
• X est membre du reste de L (cas récursif).
En général:
member(X,[X|L]).
member(Y,[X|L]) :- X \== Y, member(Y,L).

8
Les fonctions prédéfinies(4/6)
Append: concaténer deux listes.
Syntaxe: Append(List,List,List) donne true si la troisième liste est la
concaténation de la première et de la deuxième (append est prédéfini)
Exemples :
• append([],L,L).
• append([X|L1],L2,[X|L3]):=append(L1,L2,L3).
• append([a,b,[g]],[i,j],L). donne True {L=[a,b,[g],i,j]}
• append(L,[a,b],[t,u,a,b]). donne True {L=[t,u]}
9
Les fonctions prédéfinies(5/6)
Reverse: Inversion d'une liste,
Syntaxe: reverse(list,list) donne true si la deuxième liste est l'inverse de la première
(reverse est prédéfini)
Exemples:
reverse([],[]).
reverse([X|L1],L2) :- reverse(L1,L3),append(L3,[X],L2).
reverse([a,b,[c]],L). donne L=[[c],b,a]
reverse([a,b,c],[X|Y]). Donne X=c, Y=[b,a]
reverse([a,b,c,d],[d,c|L]). Donne L=[b,a]
reverse(L,[a,b,c]). donne L=[c,b,a] 10
Les fonctions prédéfinies (6/6)
• Last: retourne le dernier élément d’une liste,
Syntaxe: last(list,term)
Exemple:
last([a,b,c],[c]). donne False
last([],X). donne False
last(L,a):-L=[a];L=[_,a]
last([X],X) donne True.
last([Y|L],X) :- Y \== X, last(L,X).
11
Graphes

12
Définition (1/2)
• Ensemble de sommets (ou noeuds) reliés par des arcs (graphe orienté) ou des arêtes
(graphe non orienté).
• Permet de modéliser de nombreuses situations concrètes
• Exemple: des liaisons routières, des flux, des tâches à ordonner, etc.
Définition (2/2)
Représentation des graphes (1/2)

Une manière simple de représenter un graphe est de décrire les arcs


qui relient:
• Les sommets et leurs caractéristiques
• Les sommets et leur caractéristiques
Représentation des graphes (2/2)

• arc(a,b,5).
• arc(b,c,2).
• arc(a,d,3).
• arc(c,d,2).
• arc(d,c,3).
• sommet(a).
• sommet(b).
• sommet(c).
• sommet(d).

Vous aimerez peut-être aussi