“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 241 — #251
i
i
i
i
i
i
i
i
5.4 L’abstraction de données
241
procedure sqr(inout a:integer);
begin
a:=a*a
end
var c:integer;
c:=25;
sqr(c);
browse(c);
L’exemple utilise le mot clé « inout » pour indiquer le passage par valeur-résultat.
Ce mot clé est utilisé dans le langage Ada. Nous codons cet exemple ainsi :
proc {Sqr A}
D={NewCell @A} in
D:=@D * @D
A:=@D
end
local C={NewCell 0} in
C:=25
{Sqr C}
{Browse @C}
end
Il y a deux variables affectables : une à l’intérieur de Sqr (à savoir D) et une à l’extérieur (à savoir C). À l’entrée de Sqr, D est affectée avec le contenu de C. À la sortie,
C est affectée avec le contenu de D. Pendant l’exécution de Sqr, les modifications de
D sont invisibles de l’extérieur.
Le passage par nom (« call by name »)
Ce mécanisme est le plus complexe. Il crée une fonction pour chaque argument. L’appel de la fonction renvoie le nom d’une cellule, c’est-à-dire l’adresse d’une variable
affectable. Chaque fois que l’argument est utilisé, la fonction est appelée. Une fonction
utilisée de cette manière s’appelle un « thunk ».
4 Les thunks ont été inventés pour
l’implémentation de Algol 60. Voici un exemple :
4. C’est le sens original de thunk. Le terme thunk est aussi utilisé de façon plus générale pour désigner
toute fermeture à portée lexicale.
© Dunod – La photocopie non autorisée est un délit
Précédent

- 256/370

Suivant