### 6.5 Eval

— procedure: eval expression environment-specifier

> Evaluates expression in the specified environment and returns its value. Expression must be a valid Scheme expression represented as data, and environment-specifier must be a value returned by one of the three procedures described below. Implementations may extend ‘`eval`’ to allow non-expression programs (definitions) as the first argument and to allow other values as environments, with the restriction that ‘`eval`’ is not allowed to create new bindings in the environments associated with ‘`null-environment`’ or ‘`scheme-report-environment`’.

>     (eval '(* 7 3) (scheme-report-environment 5))
>                                                             ==>  21

>          (let ((f (eval '(lambda (f x) (f x x))
>                         (null-environment 5))))
>            (f + 10))
>                                                             ==>  20

— procedure: scheme-report-environment version
— procedure: null-environment version

> Version must be the exact integer ‘`5`’, corresponding to this revision of the Scheme report (the Revised^5 Report on Scheme). ‘`Scheme-report-environment`’ returns a specifier for an environment that is empty except for all bindings defined in this report that are either required or both optional and supported by the implementation. ‘`Null-environment`’ returns a specifier for an environment that is empty except for the (syntactic) bindings for all syntactic keywords defined in this report that are either required or both optional and supported by the implementation.

> Other values of version can be used to specify environments matching past revisions of this report, but their support is not required. An implementation will signal an error if version is neither ‘`5`’ nor another value supported by the implementation.

> The effect of assigning (through the use of ‘`eval`’) a variable bound in a ‘`scheme-report-environment`’ (for example ‘`car`’) is unspecified. Thus the environments specified by ‘`scheme-report-environment`’ may be immutable.

— optional procedure: interaction-environment

> This procedure returns a specifier for the environment that contains implementation-defined bindings, typically a superset of those listed in the report. The intent is that this procedure will return the environment in which the implementation would evaluate expressions dynamically typed by the user.