Un sujet qui n'a pas encore été abordé concerne le contexte dans lequel on évalue une référence à un texte. La réponse n'est pas forcément simple. En effet, une référence évaluée enrichit le contexte d'évaluation : faut-il alors évaluer cette référence dans le contexte enrichi, ou faut-il évaluer la référence dans le contexte dans le contexte initial puis enrichir le contexte ?
Référence à évaluer :
![]()
Référence évaluée = nouveau contexte :
![]()
On présente un exemple d'évaluation non simple :
def a
ref x
ref y
def x
def y
def u
def v
On évalue l'environnement de a :

On trouve le texte a dans glo, on évalue alors son environnement :

C'est l'environnement évalué qui sera retourné :

(ref x) : on a trouvé le texte x dans glo, la référence a donc été remplacée par son environnement.
(ref y) : on ne trouve pas y, et la référence reste indéfinie.
Or l'exemple pourrait laisser entendre que la référence à y est celle qui est importée par la référence évaluée de x. On évalue alors l'environnement de a en considérant qu'on remplace les références trouvées par leurs valeurs :
On évalue : (ref x) dans le contexte local – dont l'environnement à évaluer a :

donne :
![]()
On évalue : (ref y) dans le contexte total partiellement modifié par l'évaluation précédente :

donne :

C'est le nouvel environnement évalué de a :

On peut évidemment avoir des situations beaucoup plus complexes.
Par exemple :
def a def x def y
ref x ref t def t
ref y def u def z
ref z def v
x donne l'environnement de x :ref tref ut n'est pas trouvée ; en revanche, la référence à y donne :def t def zdef uy permet de trouver t ; ceci donne :def zz.L'évaluateur doit donc subtilement interrompre une partie de l'évaluation d'un environnement pour la reprendre ultérieurement.
Divers problèmes sont sous-jacents à cette remarque :
Par exemple :
def a def x def y
ref x def y def x
ref y
on a deux valeurs possibles à l'évaluation de l'environnement de a.