UPMC LRC - TME n2m1 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
1. ´
Ecrire un pr´edicat degre/2 tel que degre(+P,?R) est satisfait si, P´etant un polynˆome, Rest son
degr´e.
2. ´
Ecrire un pr´edicat racines/2 tel que racines(+P, ?L) est satisfait si, P´etant un polynˆome de
degr´e 2, Lest la liste de ses racines. Une racine doit ˆetre repr´esent´ee selon les cas comme un
nombre ou comme un liste `a deux ´el´ements, repr´esentant sa partie r´eelle et sa partie imaginaire .
Si Pn’est pas de degr´e 2, le pr´edicat doit r´epondre false, sans faire appel au pr´edicat degre.
Ainsi
?- racines([1, 2, 3, 4], L).
false.
?- racines([1, 2, 1], L).
L = [-1].
?- racines([1, 3, 1], L).
L = [-2.618033988749895, -0.3819660112501051].
?- racines([2, 1, 2], L).
L = [[-0.25, -0.9682458365518543], [-0.25, 0.9682458365518543]].}
3. ´
Ecrire un pr´edicat somme/3 tel que somme(+P1, +P2, ?P) est satisfait si Pest la somme des deux
polynˆomes P1 et P2.
Attention, les deux polynˆomes `a sommer ne sont pas n´ecessairement de mˆeme degr´e.
4. ´
Ecrire un pr´edicat eval/3 tel que eval(+P,+Val,?Res) est satisfait si Res est la valeur du po-
lynˆome en x=Val.
N.B. L’op´erateur de puissance, qui s’´ecrit ** en prolog, n’est pas n´ecessaire ici : une impl´ementation
efficace en temps de calcul ne l’utilise pas.
5. ´
Ecrire un pr´edicat affiche/1 qui affiche le polynˆome sous une forme sympathique : les termes de
coefficient nul ne doivent pas ˆetre affich´es, le coefficient 1 ne doit pas ˆetre affich´e, les coefficients
n´egatifs ne doivent pas ˆetre pr´ec´ed´es du signe +.
Ainsi,
?- affiche([1, 0, 1, -4]).
1+x^2-4x^3
N.B. Il faut utiliser le pr´edicat write/1 qui affiche son argument (comme is, ce n’est pas un
pr´edicat logique).
6. ´
Ecrire un pr´edicat derive/2 tel que derive(+P,?Pderive) est satisfait si la liste Pderive contient
les coefficients associ´es au polynˆome d´eriv´e du polynˆome repr´esent´e par P.
Exercice 5 – Polynˆomes, autre repr´esentation
Pour pouvoir repr´esenter plus efficacement des polynˆomes de degr´e ´elev´e ayant beaucoup de coefficients
nuls, on consid`ere qu’un polynˆome est une liste de couples, chaque couple correspondant `a un coefficient
et l’exposant de xauquel il correspond. Par exemple [[1,3],[2,6],[5,18]] repr´esente x3+2x6+5x18.
R´e´ecrire dans ce cas les pr´edicats de l’exercice 2 (sauf le pr´edicat racine), en supposant que, dans la
liste, les couples sont ordonn´es selon les exposants, et en conservant cette propri´et´e.
2
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 !