19
Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Embed Size (px)

Citation preview

Page 1: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Analyse et Programmation Déclarative / Prolog

Mise en œuvre des listes

Page 2: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Exemples de descriptions

Usage des méta caractères : [ , ] et |

[paul, jacques, pierre, michel, edouard]

[1.5, -2.75, 4.0]

[12, -11, [4, 75, 40]]

[cœur, X, pique, trèfle]

[]

[Y | Z]

Page 3: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Exemples de mise en œuvre (1)

Extraction de la tête et/ou de la queue

?- [a,b,c,d,e]=[T|Q].

T = a

Q = [b, c, d, e]

Page 4: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Exemples de mise en œuvre (2)

Cas d’une queue vide

?- [a]=[T|Q].

T = a

Q = []

Page 5: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Exemples de mise en œuvre (3)

Vérification de la tête

?- [a,b,c,d,e]=[a|Q].

Q = [b, c, d, e]

Page 6: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Exemples de mise en œuvre (4)

Vérification de la queue

?- [a,b,c,d,e]=[T|[b,c,d,e]].

T = a

Page 7: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Exemples de mise en œuvre (5)

Extraction/contrôle d’un élément

?- [a,b,c,d,e]=[a,b,c,X,e].

X = d

Page 8: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Exemples de mise en œuvre (6)

La liste vide n’a ni tête ni queue !

?- []=[T|Q].

false

Page 9: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Exemples de mise en œuvre (7)

Une liste ne contenant que la liste vide

?- [[]]=[Tete|Queue].

Tete = []

Queue = []

Page 10: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Exemples de mise en œuvre (8)

Cas d’une sous liste

?- [0,[a,b,c]]=[Tete|Queue].

Tete = 0

Queue = [[a, b, c]]

Page 11: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Exemples de mise en œuvre (9)

Unification d’une sous liste

?- [0,[a,b,c]]=[Tete|[SousListe|Fin]].

Tete = 0

SousListe = [a, b, c]

Fin = []

Yes

Page 12: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Exemples de règles (1)

Appartenance à une liste (member)

appartient(X,[X|_]).

appartient (X,[_|Q]) :- appartient(X,Q).

Page 13: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Appartenance à une liste

Etre ou ne pas être dans une liste

?- appartient (a,[q,d,a,f,d]).

true

?- appartient(a,[q,d,f,d]).

false

?- appartient (a,[q,d,[a,f,d]]).

false

Page 14: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Exemples de règles (2)

Cardinal d’une liste (length)

cardinal([], 0).

cardinal ([_|Q], N) :- cardinal(Q, P), N is P+1.

Page 15: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Cardinal d’une liste

?- cardinal ([q,d,a,f,d], N).

N=5

Yes

?- cardinal ([], 0).

true

?- cardinal ([q,d,[a,f,d]], N).

N= 3

?- cardinal (L, N).

Page 16: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Exemples de règles (3)

Somme des éléments d’une liste

somme([], 0).

somme ([T|Q], S) :- somme(Q, X), S is X+T.

Page 17: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Somme des éléments d’une liste

?- somme ([4,12,-5,1,1], S).

S=13

?- somme ([4, -4], 1).

false

?- somme ([4,[5, 6]], S).

ERROR

Page 18: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Exemples de règles (4)

Inverser l’ordre des éléments (reverse)

renverser([], []).

renverser ([T|Q], R) :- renverser(Q, X),

append(X, [T], R).

Page 19: Analyse et Programmation Déclarative / Prolog Mise en œuvre des listes

Renverser une liste

?- renverser ([a, b, c], R).

R=[c, b, a]

?- renverser ([4, -4], [-4, 4]).

true

?- renverser ([a,b,c,d], [d, X, b, a]).

X=c