This site is a static rendering of the Trac instance that was used by R7RS-WG1 for its work on R7RS-small (PDF), which was ratified in 2013. For more information, see Home. For a version of this page that may be more recent, see MutableEnvironmentsCurtisCowan in WG2's repo for R7RS-large.

Mutable­Environments­Curtis­Cowan

cowan
2013-01-28 09:51:43
2history
source

This proposal provides mutable environments for R7RS-large. It's based on this proposal by Pavel Curtis, but he is not responsible for the use I have made of it.

Introduction

The small language provides four procedures that return global environment specifiers for use by eval. They are:

Procedures

The following procedures allow an application to generate, examine, and mutate environment specifiers which can be used like those obtained from the R7RS-small procedures above.

(make-environment environment ...)

Returns a newly allocated mutable environment specifier that has imported into it the bindings of the environments.

(environment? obj)

Returns #t if obj is an environment specifier, and #f otherwise.

(mutable-environment? obj)

Returns #t if obj is a mutable environment specifier, and #f otherwise.

(environment-ref environment symbol)

If symbol is bound as a variable in the environment specified by environment, returns the value bound to it. If symbol is bound as a syntax keyword, returns an implementation-defined object. If symbol is not bound, returns #f.

(environment-bound? environment symbol)

Returns #t if symbol is bound in the environment specified by environment, and #f otherwise.

(environment-set! environment symbol value)

In the environment specified by environment, binds symbol as a variable whose value is value, discarding any existing binding. Returns an unspecified value.

(environment-for-each environment proc)

Invokes proc on each identifier bound in the environment specified by environment whose value comes from a call to environment-set!. Proc is passed the identifier and the value (or an unspecified value if the identifier is bound as a syntax keyword). Note that identifiers imported when the environment was created are not passed to proc unless their values have been changed. Returns an unspecified value.