“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 69 — #79
i
i
i
i
i
i
i
i
2.4 La sémantique du langage noyau
69
Nous simplifions {y = 1, x = y} pour obtenir {x = 1}. L’identificateur X
référence la variable x, qui est liée à 1. L’instruction suivante est la composition
séquentielle s 1 s 2 .
3. Après l’exécution de la composition séquentielle, nous avons :
( [(s 1 , {X → x}), (s 2 , {X → x})],
{x = 1} )
Chaque instruction s 1 et s 2 a son propre environnement. Les deux environnements ont la même valeur.
4. Nous commençons maintenant l’exécution de s 1 . La première instruction dans
s 1 est une instruction local. Son exécution donne
( [(X=2 {Browse X}, {X → x
}), (s 2 , {X → x})],
{x
, x = 1} )
Cela crée la nouvelle variable x
et calcule le nouvel environnement {X →
x}+{X → x
}, qui donne {X → x
}. La nouvelle correspondance de X supplante
la première.
5. Après le lien X=2 nous obtenons :
( [({Browse X}, {X → x
}), ({Browse X}, {X → x})],
{x
= 2, x = 1} )
(Souvenez-vous que s 2 est un Browse.) Maintenant la raison pour laquelle les
deux appels à Browse affichent des valeurs différentes est claire : c’est parce
qu’ils ont des environnements différents. L’instruction local de l’intérieur a son
propre environnement, dans lequel X référence une autre variable. L’instruction
local de l’extérieur garde son environnement indépendamment de ce qui se
passe ailleurs.
La définition d’une procédure et son appel
L’exemple suivant définit et appelle la procédure Max qui calcule le maximum de deux
nombres. Avec la sémantique nous pouvons voir exactement ce qui se passe pendant la
définition et l’exécution de Max. Voici le code de l’exemple avec quelques raccourcis
syntaxiques :
local Max C in
proc {Max X Y ?Z}
if X>=Y then Z=X else Z=Y end
end
{Max 3 5 C}
end
© Dunod – La photocopie non autorisée est un délit
Précédent

- 84/370

Suivant