`scope-closed(D, X)` evaluates `D` in the current environment, then
evaluates `X` in the resulting environment. Note the difference between
`scope-closed(D, X)` and `closed(scope(D, X))`: the latter is equivalent
to `closed(scope(closedD, X))`, where `D` cannot reference any bindings.
*/
## Local variables
/*
The local variable map is stored in a variable bound to "local-variables".
Initialising a local variable updates the stored local variable map.
Subsequent assignments to a local variable do not change the stored map.
The global bindings map is stored in a variable bound to "global-bindings".
Global declaration or redeclaration of an identifier involves updating the
stored global environment.
`read-line` reads characters from the standard input until a linefeed
character, giving the string formed from the sequence of characters
excluding the newline. If the input ends before the end of the line,
it fails.
/*
Some of the funcons defined below might be sufficiently reuseful for inclusion in Funcons-beta.