Make data structures immutable.
Note that, since the entire environment is not accessible when expressions are created, environment binding is delayed until after the environment is created. C++'s "mutable" keyword is used where necessary to enable this.