The state of the interpreter is contained in an object of type
Scheme_Env
. The environment contains both global and local
bindings. The definition of the Scheme_Env
structure is shown
in figure 9. The global variable bindings are held in a
hash table. The local bindings are represented by a vector of
variables (symbols) and a vector of corresponding values. An
environment that holds local variables points to the enclosing
environment with its next
field. Therefore, variable value
lookup consists of walking the environment chain, looking for a local
variable of the correct name. If no local binding is found, the
variable is looked for in the global hash table.
Figure: The Scheme_Env structure
Table 1 lists the environment manipulation functions.
Unless the user is adding special forms that create variable bindings,
she usually only needs to worry about the scheme_basic_env()
and scheme_add_global()
functions. The
scheme_basic_env()
function is used to create a new environment
with the standard Scheme bindings which can then be extended with new
primitives, types, etc. using scheme_add_global()
.
Table 1: Environment manipulation functions