“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 71 — #81
i
i
i
i
i
i
i
i
2.4 La sémantique du langage noyau
71
La mémoire contient les quatre variables m, a, b et c. L’environnement de s 1 a
des correspondances pour chacune de ses variables.
3. Après l’exécution des liens de Max, A et B, nous obtenons :
( [({Max A B C}, {Max → m, A → a, B → b, C → c})],
{m = (proc {$ X Y Z} s 3 end, f), a = 3, b = 5, c} )
Les variables m, a et b sont maintenant liées aux valeurs. La procédure est prête
à être appelée. Remarquez que l’environnement contextuel de Max est vide parce
qu’elle n’a pas d’identificateurs libres.
4. Après l’exécution de l’appel de procédure, nous obtenons :
( [(s 3 , {X → a, Y → b, Z → c})],
{m = (proc {$ X Y Z} s 3 end, f), a = 3, b = 5, c} )
L’environnement de s 3 a maintenant des correspondances pour les nouveaux
identificateurs X, Y et Z.
5. Après l’exécution de la comparaison X>=Y, nous obtenons :
( [(s 4 , {X → a, Y → b, Z → c, T → t})],
{m = (proc {$ X Y Z} s 3 end, f), a = 3, b = 5, c, t = false} )
Il y a le nouvel identificateur T et sa variable t liée à false.
6. L’exécution est terminée après l’instruction s 4 (l’instruction conditionnelle) :
( [], {m = (proc {$ X Y Z} s 3 end, f), a = 3, b = 5, c = 5, t = false} )
La pile des instructions est vide et c est liée à 5.
Une procédure avec des références externes (première partie)
Notre troisième exemple définit et appelle la procédure LowerBound, qui garantit
qu’un nombre ne sera jamais plus petit qu’une borne inférieure donnée. Cet exemple
est intéressant parce que LowerBound a une référence externe. Regardons l’exécution du code suivant :
local LowerBound Y C in
Y=5
proc {LowerBound X ?Z}
if X>=Y then Z=X else Z=Y end
end
{LowerBound 3 C}
end
© Dunod – La photocopie non autorisée est un délit
Précédent

- 86/370

Suivant