Travaux Pratiques 3 :
Les Listes
Programmation Logique sous
l’environnement SWI-Prolog
Préparé par : Encadré par :
• Hanane EL-MOUDENE • M. BERRADA
• BENZINEB Doha
• MEDRARE Kawtar
Table de matières :
Table des matières
1 Introduction : ................................................................................................................................... 3
2 Manipulations :................................................................................................................................ 3
2.1 Exercice 1 : ............................................................................................................................... 3
2.2 Exercise 2: le tri des listes ........................................................................................................ 6
3 Conclusion: ...................................................................................................................................... 7
1 Introduction :
SWI-Prolog propose de nombreuses fonctionnalités, parmi eux, il nous donne la possibilité de
définir une liste d’éléments ou objets de même type qui peut être gérée dynamiquement pour faire
toute sorte de manipulation.
Les listes sont des structures de données de base, en Prolog, et il y a plusieurs fonctions prédéfinies
qui permettent leur gestion afin de les utiliser dans le domaine de l'Intelligence Artificielle et la
Programmation Logique avec Contraintes.
Dans ce TP nous allons aborder le sujet des listes et comment les manipuler.
2 Manipulations :
2.1 Exercice 1 :
1- Le prédicat vide(L) pour tester si la liste L est vide.
• Le test
2- le prédicat concat(L1,L2,L3), où L3 est le résultat de la concaténation de L1 et L2
(sans utiliser le prédicat prédéfini append).
• Test :
3- le prédicat longueur(L,N), qui étant donnée la liste L calcule sa longueur N.
• Test :
4- indice( X , L , N), qui étant donnés un élément X et une liste L, X appartenant à L,
calcule N l’indice de la première occurrence de X dans L.
• Test :
5- le prédicat remplace(X1,X2,L1,L2) qui construit la liste L2 qui est la liste L1 dans
laquelle X1 est remplacé par X2.
• Test :
6- Le prédicat inserPos(X, P, L1, L2) qui permet d’insérer l’élément X à la position P
dans la première liste L1, le résultat est dans la deuxième liste L2.
7- Le prédicat inverser(L1, L2) qui inverser la liste L1 pour trouver la liste L2.
8- Le prédicat dernierElem(L, X), dont X est le dernier élément de la liste L.
• Test :
9- un prédicat saisirListe(L, N) qui construit une liste L à partir d’une suite de N
éléments saisie au clavier.
• Test :
10- un prédicat nbOccur( X, L, N) qui calcule dans N le nombre d’occurrence d’un
élément X dans la liste L.
• Test :
11- un prédicat supprimerAllOccur ( X, L1, L2) qui supprime toute occurrence d’un
élément X dans une liste L1, le résultat dans la liste L2.
• Test :
12- un prédicat supprimerPos ( X, P, L1, L2) qui supprime un élément X à la position P
d’une liste L1.et le prédicat rechercherPos(X, L, P) qui recherche de la position P
d’un élément X dans une liste.
2.2 Exercise 2: le tri des listes
1. Définir le prédicat enleve(X,L1,L2), qui construit la liste L2, qui est la liste L1 à laquelle on a
enlevé la première occurrence de l’élément X
2. Définir minimum(L,X) qui calcule le minimum X de la liste L.
3. Définir le prédicat tri_min(L,Lt) qui construit la liste triée Lt à partir de la liste de nombres L
3 Conclusion:
En Prolog, on ne connait que les premiers éléments d'une liste (la tête) et c'est de manière
récursive qu'on accède au reste de la liste (la queue).
Les programmeurs habitués à des langages comme C, Java ou autres ont tendance à se réfugier
derrière les listes, car elles leur rappellent certaines structures de données existantes dans d'autres
langages (les tableaux). Cependant, il existe d'énormes différences entre manipuler des tableaux
en C et manipuler des listes en Prolog (pas d'accès direct, grande consommation de mémoire…). À
l'inverse, Prolog offre des mécanismes qui n'ont aucun équivalent dans d'autres langages (bases de
connaissance et de règles, retour sur trace, etc.) et qu'il faut apprendre à exploiter.