“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 72 — #82
i
i
i
i
i
i
i
i
72
2
• La programmation déclarative
C’est très similaire à l’exemple Max. Le corps de LowerBound est identique au
corps de Max. La seule différence est que LowerBound a une référence externe. La
valeur procédurale est
( proc {$ X Z} if X>=Y then Z=X else Z=Y end end, {Y → y} )
avec la mémoire suivante :
y = 5
Quand la procédure est définie, c’est-à-dire quand la valeur procédurale est créée,
l’environnement doit contenir une correspondance pour Y. On fait maintenant l’appel
{LowerBound A C} avec A liée à 3. Juste avant l’appel nous avons :
( [({LowerBound A C}, {Y → y, LowerBound → lb, A → a, C → c})],
{ lb = (proc {$ X Z} if X>=Y then Z=X else Z=Y end end,
{Y → y}), y = 5, a = 3, c} )
Après l’instruction de l’appel, quand l’exécution du corps de la procédure commence,
nous avons :
( [(if X>=Y then Z=X else Z=Y end, {Y → y, X → a, Z → c})],
{ lb = (proc {$ X Z} if X>=Y then Z=X else Z=Y end end,
{Y → y}), y = 5, a = 3, c} )
Le nouvel environnement est calculé en commençant avec l’environnement contextuel
({Y → y} dans la valeur procédurale) en ajoutant les correspondances des arguments
formels X et Z aux arguments effectifs a et c.
Une procédure avec des références externes (deuxième partie)
Dans l’exemple précédent, l’identificateur Y référence la même variable y dans l’environnement contextuel de LowerBound et dans l’environnement à l’appel. Comment
l’exécution changerait-elle si l’instruction suivante était exécutée au lieu de {LowerBound 3 C} ? :
local Y in
Y=10
{LowerBound 3 C}
end
Y ne référence plus y dans l’environnement à l’appel ! Avant de regarder la réponse,
veuillez poser le livre, prendre une feuille de papier, et faire l’exécution. Juste avant
l’appel nous avons presque la même situation :
Précédent

- 87/370

Suivant