“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 242 — #252
i
i
i
i
i
i
i
i
242
5
• La programmation avec état explicite
procedure sqr(callbyname a:integer);
begin
a:=a*a
end;
var c:integer;
c:=25;
sqr(c);
browse(c);
L’exemple utilise le mot clé « callbyname » pour indiquer le passage par nom. Nous
codons cet exemple ainsi :
proc {Sqr A}
{A}:=@{A} * @{A}
end
local C={NewCell 0} in
C:=25
{Sqr fun {$} C end}
{Browse @C}
end
L’argument A est une fonction dont l’invocation renvoie le nom d’une variable affectable. La fonction est appelée chaque fois que l’argument est utilisé. Le passage par
nom peut donner des résultats non-intuitifs si des indices de tableau sont utilisés dans
l’argument (voir exercices, section 5.7).
Le passage par besoin (« call by need »)
C’est une modification du passage par nom dans laquelle la fonction est appelée au
maximum une fois. Son résultat est conservé pour les utilisations ultérieures. Voici
une manière de coder le passage par besoin pour l’exemple de passage par nom :
proc {Sqr A}
B={A} in
B:=@B * @B
end
local C={NewCell 0} in
C:=25
{Sqr fun {$} C end}
{Browse @C}
end
L’argument A est évalué une fois si l’argument est utilisé. La variable locale B garde
alors le résultat. Si on a encore besoin de l’argument, c’est B qui sera utilisée pour éviter
Précédent

- 257/370

Suivant