Finally, lambda expressions are tagged with elements from a set Tags, and a halt expression is introduced into the language.
The domains Vars and Tags are program dependent and thus finite, since a given program contains only a finite number of variables and lambda expressions.
A significant fraction of the lambda expressions in the benchmarks could be optimized, but those lambda expressions were not repeatedly evaluated during execution.
A constant term is mapped to a constant value, a variable is dereferenced, and a lambda expression is mapped to a closure that closes over the current environment.
Because procedures are first-class, the evaluation of a lambda expression yields a closure consisting of the procedure's code and the environment in which the expression was evaluated.
The code pointer in the closure does not need to be referenced if the operator always evaluates to procedures built from the same lambda expression.