UPMC LRC - TME n◦2m1 androide
Ann´
ee 2014-2015 m1 dac
Op´erateur is Au-del`a de ses capacit´es de raisonnement logique, prolog permet d’effectuer des calculs
num´eriques, par l’op´erateur is. Il faut souligner que l’´evaluation de cet op´erateur ne passe pas par le
principe de l’inf´erence par r´esolution et sort du cadre purement logique de prolog.
L’instruction ?- X is Exp. unifie la variable `a gauche de is `a la valeur num´erique r´esultat de l’ex-
pression de droite.
L’op´erateur is impose que toutes les variables qui apparaissent dans Exp soient li´ees, il n’est pas
commutatif.
Exercice 1 – Arithm´etique de base
1. D´efinir le pr´edicat num´erique factorielle/2 tel que factorielle(N,R) est satisfait si, N´etant
un entier, Rest sa factorielle.
Ainsi, factorielle(5, R) doit fournir pour seule unification R = 120.
2. D´efinir un pr´edicat longueur/2 tel que longueur(L,N) est satisfait si, L´etant une liste, Nest sa
longueur.
NB il existe le pr´edicat pr´ed´efini length, il vous est demand´e ici de le reprogrammer, et donc de
ne pas l’utiliser.
Quelle est la diff´erence entre longueur et length ?
Exercice 2 – Liste d’entiers
1. D´efinir le pr´edicat entierListe(N, L) qui est satisfait si L est la liste des chiffres constituant N.
Ainsi entierListe(1023,L). doit conduire `a l’unique instanciation L = [1, 0, 2, 3].
Il faut pour cela utiliser les op´erateurs math´ematiques // et mod qui calculent respectivement le
quotient et le reste de la division enti`ere.
2. D´efinir le pr´edicat listeEntiersCroissant(I,J,L) qui est satisfait si L est la liste des entiers
successifs de I `a J (donn´es) dans l’ordre croissant.
Ainsi listeEntiersCroissant2(-1,2,L). doit conduire `a l’unique instanciation L = [-1, 0,
1, 2]. La requˆete listeEntiersCroissant2(4,2,L). doit ´echouer.
3. D´efinir le pr´edicat max(N,L) qui calcule le maximum des nombres de la liste L.
Exercice 3 – Listes imbriqu´ees
´
Ecrire un pr´edicat plusLongueListe/2 telle que plusLongueListe(L1,L2) est satisfait si L2 est la
listes des sous-listes de taille maximale de la liste de listes L1.
?- longestList([[1],[1,2],[1,2,3],[1,2,3,4]],LI).
LI = [[1, 2, 3, 4]] ;
No
?- longestList([[a,b,c],[d,e],[f,g,h]],LI).
LI = [[f, g, h],[a,b,c]];
No
Exercice 4 – Polynˆomes
On peut repr´esenter un polynˆome par la liste de ses coefficients, le premier terme de la liste corres-
pondant au terme constant, le second au coefficient du terme en x, etc.
Ainsi 2 + 5x+x3+ 6x4est repr´esent´e par la liste [2,5,0,1,6].
1