Licence MASS 2
ème
année – TD n°2 Prolog Page 2 sur 2
Manipulation de listes simples
La manipulation des listes est présentée dans le cours n°3.
Une liste en Prolog est représentée par une liste de valeurs séparées par des virgules et
encadrée de crochets comme par exemple [il, fait, beau], et [] représente la liste vide.
La notation [X|Y] représente une liste dont la tête (le 1er élément) est X et la queue (le reste de
la liste) est Y. Cela constitue la base de l’utilisation des listes dans les programmes Prolog.
Cas général : [Tete | Queue] ≡ [Car | Cdr ] (cf. Scheme)
[a, b, c] ≡ [a | [b | [c | [ ] ] ] ]
Exercice 5
Ecrire le prédicat somme/2 qui détermine la somme des éléments d'une liste. Par exemple :
?- somme([2,4,6,8],R).
R=20
Exercice 6
Ecrire le prédicat multListe/3 qui, étant donné une liste de nombres et un coefficient, détermine
une nouvelle liste dans laquelle tous les nombres de la première liste ont été multipliés par le
coefficient :
?- multListe([5,3,7,1,0],2,L).
L=[10,6,14,2,0]
Exercice 7
Ecrire le prédicat nieme(N,L,X) qui est vrai si X est le Nième élément de la liste L. Par exemple :
?- nieme(2,[3,4,5,6],X).
X=4.
Exercice 8
Ecrire le prédicat Prolog nb(L,Min,Max,N) qui détermine le nombre N d'éléments d'une liste L
appartenant à l’intervalle de valeurs [Min,Max]. Le premier argument est la liste, le second est la
borne inférieure Min, le troisième est la borne supérieure Max et le dernier est le résultat.
?- nb([4,1,7,3,9,11,6],4,9,N).
N=5
Exercice 9
Soit deux listes composées chacune des chiffres de 0 à 9. Ecrire diff/3 qui construit la liste des
différences entre les éléments de la première liste et ceux de la seconde liste.
?- diff([4,6,1,2,9,0,3,7,5,8],[3,4,9,0,1,5,2,7,8,6],R).
R=[1,2,-8,2,8,-5,1,0,-3,2]
Exercice 10
Ecrire le prédicat lettres/2 qui détermine la liste des lettres des mots d'une liste donnée. C'est le
prédicat name/2 qui permet de transformer un terme en une liste de code de lettres.
?- lettres ([baba,ane,bien],R).
R=[b,a,e,i,n]
Exercice 11
On dispose de faits représentant le prix au kilo de fruits.
prix(pomme,7).
prix(melon,13).
prix(banane,8).
...
Ecrire le prédicat Prolog total qui détermine le montant total d'une liste de fruits avec leur poids.
Chaque couple fruit/poids est représenté par une liste à deux éléments. Le premier paramètre
est donc une liste de liste.
?- total([[banane,1.5],[pomme,0.5]],T).
T=15.5