“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 9 — #19
i
i
i
i
i
i
i
i
1.5 Les fonctions avec les listes
9
ShiftRight met simplement un zéro à gauche. ShiftLeft est plus compliquée :
elle traverse L élément par élément et construit le résultat un élément à la fois. Nous
avons ajouté un else à l’instruction case. Son comportement est analogue à un
else dans un if : la branche else sera exécutée si la forme du case ne correspond
pas. Quand L est vide (nil), le résultat sera [0], une liste avec un élément zéro.
Voici AddList :
fun {AddList L1 L2}
case L1 of H1|T1 then
case L2 of H2|T2 then H1+H2|{AddList T1 T2} end
else nil end
end
Cette fonction utilise deux case, l’une imbriquée dans l’autre, parce qu’il faut décomposer deux listes, L1 et L2. Nous avons maintenant la définition complète de Pascal.
Nous pouvons calculer toutes les rangées du triangle de Pascal. Par exemple, l’appel
{Pascal 20} renvoie la vingtième rangée :
[1 19 171 969 3876 11628 27132 50388 75582 92378
92378 75582 50388 27132 11628 3876 969 171 19 1]
Cette réponse est-elle correcte ? Comment le savoir ? Elle semble correcte : elle est
symétrique (inverser la liste donne la même liste) et les premier et deuxième éléments
sont respectivement 1 et 19, ce qui est correct. En regardant la figure 1.2, il est facile
de comprendre que le deuxième élément de la nième rangée est toujours n − 1 (il est
toujours un de plus que la rangée précédente et il a la valeur zéro pour la première
rangée). Dans la section 1.6, nous verrons comment raisonner sur l’exactitude d’un
programme.
Le développement descendant du logiciel
Voici un résumé de la méthodologie que nous avons utilisée pour écrire Pascal :
– La première étape est de comprendre comment faire le calcul à la main.
– La deuxième étape est d’écrire une fonction principale pour résoudre le problème, en supposant que les fonctions auxiliaires existent (ici, ShiftLeft,
ShiftRight et AddList).
– La troisième étape est de compléter la solution en définissant les fonctions auxiliaires.
La méthodologie qui consiste d’abord à écrire la fonction principale et ensuite à
la compléter s’appelle le développement descendant. Cette approche est l’une des
mieux connues pour le développement du logiciel mais elle n’est pas complète, comme
nous le verrons plus tard.
© Dunod – La photocopie non autorisée est un délit
Précédent

- 24/370

Suivant