Licence MASS 2
ème
année – TD n°2 Prolog Page 1 sur 2
Université Pierre Mendès France
U.F.R. Sciences de l’Homme et de la Société
Licence MIASS 2
ème
année
TD Programmation en Logique n°2
Exercice 1
On considère le programme Prolog ci-dessous.
a) Quelles solutions pour X et Y retourne Prolog à la requête
r(X,Y) ?
r(0,0).
r(X,Y):- p(X), q(Y).
r(Y,X):- p(Y), q(Y), X=3, Y<X.
r(5,5).
p(1).
p(2).
q(2).
q(3).
b) Même question avec l'ajout d'un cut en deuxième ligne :
r(X,Y) :- p(X), q(Y), !.
Exercice 2
Soit le programme suivant.
Quelles sont toutes les solutions des requêtes suivantes ?
a) a(0,X).
b) a(1,X).
c) a(2,X).
d) a(3,X).
a(0,Y):
-
!,c(Y).
a(X,Y):-b(X,Y),!,c(X).
a(_,_).
b(1,2).
b(1,3).
b(2,5).
c(1).
c(2).
c(3).
Exercice 3
On considère le problème suivant :
« L’an dernier, mon père avait le double de mon âge. Cette année, nos deux âges s’expriment
par les deux mêmes chiffres, mais écrits dans un ordre différent. Quel est l’âge de mon père et
quel est mon âge ? »
Ecrire un petit programme Prolog qui résout ce problème. On définira le prédicat ages/2 qui
détermine les âges du père et du fils.
Exercice 4
a) Ecrire un programme Prolog qui résout le problème suivant :
S E N D
+ M O R E
---------
= M O N E Y
Chaque lettre est associée de manière unique à un chiffre. Pour cela, on pourra utiliser le
prédicat suivant pour définir les chiffres :
chiffre(X) :- between(0,9,X).
Affichez la solution de la même manière que ci-dessus à l’aide des instructions write/1 et nl/0
(voir cours n°2)
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 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
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !