SI4 – 2015-2016
Programmation Fonctionnelle
Erick Gallesio
Feuille 1
Introduction `a Scheme
Les exercices de cette feuille doivent vous permettre de vous familiariser avec la syntaxe de Scheme
et avec l’environnement DrRacket. Ces exercices n’utilisent que des fonctions math´ematiques sim-
ples.
Note: Avant de commencer `a travailler, il faut que vous installiez DrRacket sur votre machine.
Pour cela, si vous ˆetes sur Ubuntu ou Debian, entrez la commande suivante
$ sudo apt-get install racket
Si vous ˆetes sur Windows, vous pourrez t´el´echarger une version compil´ee de DrRacket pour votre
environnement `a l’URL suivante: http://download.racket-lang.org/.
Une fois que vous avez install´e DrRacket, lancez-le et choisissez l’option Assez gros Scheme dans
le menu Langage. Cette op´eration, `a faire une seule fois, permet de d´efinir le langage que utilis´e
dans l’environnement. Ce choix correspond en fait au langage utilis´e en cours.
Exercice 1. ´
Ecrivez les expressions suivantes en Scheme et entrez les sous l’interpr`ete pour
v´erifier.
3+2 1+2+3+4+5
5+23 5 23
3×(5 + 2) ×4 (1 + 2) ×(2 + 3 + 4)
si 1<2alors 3+2 sinon 0
Exercice 2. ´
Ecrire en Scheme les fonctions fact (factorielle) et fib (fibonacci). On rappelle
ici la d´efinition de la fonction fib:
fib(n) =
0si n = 0
1si n = 1
fib(n1) + fib(n2) sinon
.
´
Ecrire ces fonctions de fa¸con r´ecursive.
> (fact 50)
30414093201713378043612608166064768844377641568960512000000000000
> (fib 25)
75025
Exercice 3. ´
Ecrivez la fonction racines qui, ´etant donn´es les param`etres a,bet cde l’´equation
ax2+bx +c= 0 retourne la liste contenant soit deux racines distinctes, soit une racine double,
soit la liste vide.
> (racines 1 2 1) > (racines 1 1 -6)
(-1) (-3 2)
> (racines 1 0 -1) > (racines 1 1 1)
(-1 1) ()
Utilisez une fonction auxiliaire pour calculer la valeur de ∆. Vous pourrez utiliser la fonction list
pour construire la liste des r´esultats. Cette fonction prend un nombre quelconque de param`etres
et renvoie une liste constitu´ee de ses param`etres (dans le mˆeme ordre).
> (list 1 2)
(1 2)
> (list 1)
(1)
> (list)
()
Exercice 4. ´
Ecrire la fonction somme-carr´es qui calcule la somme des npremiers entiers au
carr´e, puis ´ecrire la fonction somme-cubes qui calcule la somme des npremiers entiers au cube:
> (somme-carr´es 2) > (somme-cubes 2)
5 9
> (somme-carr´es 3) > (somme-cubes 3)
14 36
> (somme-carr´es 100) > (somme-cubes 100)
338350 25502500
En partant des deux fonctions pr´ec´edentes, ´ecrire la fonction sigma calculant
n
X
i=0
f(i)
o`u fest une fonction quelconque. Cette fonction prendra deux param`etres: la fonction `a sommer
fet le nombre nde valeurs `a sommer.
Utilisez la fonction sigma pour r´ecrire les fonctions somme-carr´es et somme-cubes pr´ec´edentes.
Exercice 5. La d´eriv´ee d’une fonction fest d´efinie comme
lim
dx0
f(x+dx)f(x)
dx
´
Ecrire la fonction eriv´ee qui renvoie la d´eriv´ee de la fonction qui lui est pass´ee en param`etre.
La fonction r´esultat sera une fonction `a deux param`etres: le point en lequel on veut calculer la
d´eriv´ee et la pr´ecision avec laquelle on veut cette valeur (le dx).
> (define carre (lambda (n) (* n n)))
carre
> (define d-carre (d´eriv´ee carre))
d-carre
> (d-carre 3 0.001)
;; valeur exacte: 6
6.00099999999948
´
Ecrire une seconde version de la fonction eriv´ee prenant en compte la pr´ecision dx au moment
de la construction de la fonction d´eriv´ee:
SI4 – 2015-2016 2Programmation Fonctionnelle
(define d-carre (d´eriv´ee carre 0.001))
d-carre
> (d-carre 3)
6.00099999999948
>
Exercice 6. Exercice facultatif Reprendre la fonction sigma efinie pr´ec´edemment pour qu’elle
ne prenne plus qu’un seul param`etre: la fonction f`a sommer. Cette fonction renverra la fonction
qui calcule la somme (non born´ee) des f(i).
Utilisez cette nouvelle fonction sigma pour r´ecrire les fonctions somme-carr´es et somme-cubes.
SI4 – 2015-2016 3Programmation Fonctionnelle
1 / 3 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 !