Right, and this would be easy if Scheme had complete lexical scoping.
Consider:
(let ((foo (lambda () ...)))
(... stuff ...
(foo 'bar)))
Now how can foo be changed before bar without an explicit and obvious
"let" or "set!"? This function can be called 100 times and foo will
always have the same value, no matter what happens outside of it. Isn't
it the exception to lexical scoping at the top level environment that
allows the value of "cons" to change between one execution of a function
and another?
Paul Prescod