Références : sur le langage Scheme [AbS 83] [Sch 87].
On présente en premier le langage Scheme parce qu'il répond de la manière la plus satisfaisante à l'interprétation "intuitive" qu'on peut donner d'une λ-expression. La recherche des identificateurs est réalisée statiquement (« lexical scoping ») : ceci facilite beaucoup le travail du compilateur.
1. Termes
2. Application
Symbole
Un symbole retourne sa valeur :
Irep[env-0 x] ; si
= env-0(x)x est défini dans env-0, sinon <erreur>
λ-expression
Une définition de λ-expression retourne la forme Iλ inchangée :
Irep[env-0 (lambda(u) env rep)]
= Iλ[env-0 λu.(env rep)]
Dans cette "forme figée" on conserve l'environnement d'évaluation de la définition (ici : env-0) : celui-ci correspond de fait à l'environnement lexical de définition.
Définition
Une définition évalue son argument :
Ienv[env-0 (def x env rep)]
env0 = Ienv[env-0 env]
rep0 = Irep[env0:env-0 rep]
= ( x :→ rep0 )
La valeur est donc calculée à la définition du symbole.
Note : l'interprétation donnée ici à un environnement parallèle (de type define) n'est pas garantie par le « manager ».
Par exemple :
| retourne : |
| retourne : |