“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 115 — #125
i
i
i
i
i
i
i
i
3.2 Le calcul itératif
115
fun {Sqrt X}
Guess=1.0 in
{SqrtIter Guess X}
end
fun {SqrtIter Guess X}
if {GoodEnough Guess X} then Guess
else {SqrtIter {Improve Guess X} X} end
end
fun {Improve Guess X}
(Guess + X/Guess) / 2.0
end
fun {GoodEnough Guess X}
{Abs X-Guess * Guess}/X < 0.00001
end
fun {Abs X} if X<0.0 then ˜X else X end end
Figure 3.4 Trouver les racines avec la méthode de Newton (première version).
3.2.3 L’utilisation des procédures locales
Dans le programme de la figure 3.4, il y a plusieurs routines auxiliaires : SqrtIter,
Improve, GoodEnough et Abs. Ces routines sont des briques de base pour la
fonction principale Sqrt. Dans cette section, nous étudions le meilleur emplacement
du programme pour les définir. Le principe de base est le suivant : une routine auxiliaire
qui est définie uniquement comme une aide pour la définition d’une autre routine ne
devrait pas être visible ailleurs. (Nous utilisons le terme « routine » pour désigner les
fonctions et les procédures.)
Dans l’exemple de Newton, SqrtIter est utilisée uniquement à l’intérieur de
Sqrt, Improve et GoodEnough ne sont utilisées qu’à l’intérieur de SqrtIter
et Abs pourrait être utilisée ailleurs. Il y a deux façons pour exprimer ces visibilités,
avec des sémantiques légèrement différentes. La première façon est illustrée dans
la figure 3.5 : les routines auxiliaires sont définies à l’extérieur de Sqrt dans une
instruction local. La deuxième façon est illustrée dans la figure 3.6 : chaque routine
auxiliaire est définie à l’intérieur de la routine qui en a besoin.
4
Dans la figure 3.5, il y a un compromis entre la lisibilité et la visibilité : Improve
et GoodEnough pourraient être définies à l’intérieur de SqrtIter. Cela donnerait
deux niveaux d’instructions local, ce qui est plus difficile à lire. Nous avons décidé
de mettre les trois routines au même niveau dans une instruction local.
4. Nous omettons la définition de Abs pour éviter une répétition gratuite.
© Dunod – La photocopie non autorisée est un délit
Précédent

- 130/370

Suivant