Références : sur le langage LeLisp [Manuel LeLisp V15.2], sur le langage Interlisp [TeM 81], sur le langage Common Lisp, qui mêle la fermeture lexicale et la liaison dynamique [Tou 88].
Dans un Lisp standard, l'évaluateur empile les environnements d'évaluation : la recherche d'un identificateur – un symbole – est alors dynamique (« dynamic scoping »). Ceci a deux conséquences importantes :
1. Termes
2. Application
Application
L'application de f sur a :
Irep[env-0 (apply f a)]
Irep[env-0 f] = Iλ[env-lex λu.(env-f rep-f)]
Irep[env-0 a] = a
= Irep[env-f0:(u:→a):env-lex rep-f]
où env-f0 = Irep[(u:→a):env-lex env-f]
(l'évaluation d'un environnement est simultanée, avec la variante séquentielle).
En définitive, une λ-expression est quotée, en ce sens que l'environnement lexical de définition est ignoré à l'application – ou plus justement il est inconnu. On a alors la petite variante dans les Lisps standards :
- ceux qui refusent les λ-expressions non quotées,
- et ceux qui les acceptent, et les évaluent identiquement à elles-mêmes.
Evaluation
Irep[env-0 (quote x)] = x
Irep[env-0 (eval x)]
Irep[env-0 x] = x
= Irep[env-0 x]
On a donc les quote et eval "purs" pour lesquels on n'indique pas l'environnement dans lequel on va évaluer – qui sera par défaut pris égal à celui dans lequel on est placé.