Exercice 1 : Implantation de la méthode de Newton
La méthode de Newton permet de trouver les racines d'une fonction
dérivable. Elle dit que si x0 est une approximation d'une racine d'une
fonction f , alors une meilleure approximation est donnée par :
.
Rappel : Utilisation des fonctions apply et map
apply et map sont des fonctions d'ordre supérieure prédéfinies
dans Scheme. Elles permettent d'appliquer une fonction à une liste de
paramètres.
La fonction apply prend comme paramètres une fonction f et une liste l et renvoie le résultat de la fonction en prenant comme valeurs de ses paramètres les éléments de l.
Si
alors l doit être une liste de longeur n dont les types des éléments correspondent aux types des arguments de la fonction, c'est à dire une liste de la forme
avec
,
etc...
L'appel (apply f '(e1 e2 ... en)) est equivalent à (f e1 e2 ... en)
Par exemple l'évaluation de (apply + '(1 2 3)) rend le résultat 6.
La fonction map permet de distribuer l'appel d'une fonction sur plusieurs arguments et renvoie la liste des résultats.
Pour une fonction
et une liste
dont tous les éléments sont du type D,
l'appel (map f '(e1 ... ek)) applique la fonction à chacun des ei et renvoie la liste
.
Par exemple, l'évaluation de (map car '((1 2)(3)(7 8 9))) rend comme résultat la
liste (1 3 7).
Si la fonction f est d'arité n, c'est à dire
,
alors la fonction map prend en arguments n listes
,
les éléments de chaque liste li étant tous du type Di correpondant.
Exercice 2 :
combine : | Fonction | Fonction |
![]() |
Fonction |
![]() |
![]() |
![]() |
![]() |
|
![]() |
Exercice 3 : Un générateur de fonctions récursives simples.
Lorsqu'on définit une fonction récursive, on doit se poser 4
questions :
Dans cet exercice, on veut définir une fonction (genrec arret valarret calcul decrois) qui prend comme paramètres 4 fonctions, correspondants aux 4 questions ci-dessus et rend la fonction récursive correspondante. Ces paramètres sont :
Exemples d'utilisations de la fonction genrec :
(define factorielle (genrec (lambda (x) (= x 0)) (lambda (x) 1) (lambda (x r) (* x r)) (lambda (x) (- x 1))) )
(define fois2 (genrec (lambda (l) (null? l)) (lambda (l) '()) (lambda (l r) (cons (* 2 (car l)) r)) (lambda (l) (cdr l))) )
En utilisant la fonction genrec, générer les fonctions :