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.
Source for wiki MutableEnvironmentsCurtisCowan version 1
author
cowan
comment
ipnr
74.68.121.27
name
MutableEnvironmentsCurtisCowan
readonly
0
text
This proposal provides mutable environments for R7RS-large. It's based on [http://groups.csail.mit.edu/mac/ftpdir/scheme-mail/HTML/rrrs-1988/msg00139.html 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 environments for use by `eval`. They are:
* `environment`, which returns an immutable environment when passed on zero or more import-specs which contains the bindings made available by those import specs
* `scheme-report-environment`, which when passed the argument `5` returns a copy of the R5RS environment, which may or may not be mutable
* `null-environment`, which when passed the argument `5` returns a subset of the R5RS environment containing syntax keywords only, which may or may not be mutable
* `interaction-environment`, which returns a mutable environment containing implementation-defined bindings, including at least those exported by the base library
== Procedures ==
The following procedures allow an application to generate, examine, and mutate environments which can be used like those obtained from the R7RS-small procedures above.
`(make-environment `''environment'' ...`)`
Returns a newly allocated mutable environment that has imported into it the bindings of the ''environments''.
`(environment? `''obj''`)`
Returns `#t` if ''obj'' is an environment, and `#f` otherwise.
`(mutable-environment? `''obj''`)`
Returns `#t` if ''obj'' is a mutable environment, and `#f` otherwise.
`(environment-ref `''environment symbol''`)`
If ''symbol'' is bound as a variable in ''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 ''environment'', and `#f` otherwise.
`(environment-set! `''environment symbol value''`)`
In ''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 ''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.
time
2012-12-04 16:19:56
version
1