“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 117 — #127
i
i
i
i
i
i
i
i
3.2 Le calcul itératif
117
Dans la figure 3.6, chaque routine voit les arguments de la routine qui l’entoure
comme des références externes. Ces arguments sont justement ceux avec lesquels les
routines sont appelées. Nous pouvons donc simplifier la définition en les enlevant.
Cela donne la figure 3.7.
fun {Sqrt X}
fun {SqrtIter Guess}
fun {Improve}
(Guess + X/Guess) / 2.0
end
fun {GoodEnough}
{Abs X-Guess * Guess}/X < 0.00001
end
in
if {GoodEnough} then Guess
else {SqrtIter {Improve}} end
end
Guess=1.0
in {SqrtIter Guess} end
Figure 3.7 Trouver les racines avec la méthode de Newton (quatrième version).
Il y a un compromis pour le placement des définitions auxiliaires par rapport à la
routine qui en a besoin : les mettre à l’extérieur ou à l’intérieur.
– Le placement intérieur (les figures 3.6 et 3.7) permet aux auxiliaires de voir
les arguments des routines principales comme des références externes, selon la
règle de la portée lexicale (voir section 2.4.3). Elles ont donc besoin de moins
d’arguments. Mais chaque fois que la routine principale est appelée, de nouvelles
routines auxiliaires sont créées. Cela veut dire la création de nouvelles valeurs
procédurales.
– Le placement extérieur (les figures 3.4 et 3.5) permet de créer les valeurs procédurales une fois pour toutes, pour tous les appels de la routine principale. Mais
les routines auxiliaires ont besoin de plus d’arguments.
Dans la figure 3.7, des nouvelles définitions de Improve et GoodEnough sont
créées pour chaque itération de SqrtIter, tandis que SqrtIter n’est créée qu’une
fois. Cela suggère un bon compromis, où SqrtIter est locale à Sqrt et Improve
et GoodEnough sont toutes les deux à l’extérieur de SqrtIter. Nous obtenons
alors la définition finale de la figure 3.8, que nous considérons comme la meilleure
pour l’efficacité et la visibilité.
© Dunod – La photocopie non autorisée est un délit
Précédent

- 132/370

Suivant