[R6RS] When do define-bound variables get bound?

R. Kent Dybvig dyb at cs.indiana.edu
Wed Jan 10 09:45:49 EST 2007

> Robby noticed this when writing the semantics:
> How should
> (define x y)
> (define y ...)
> and
> (define x x)
> behave?

Both must raise exceptions because a RHS references a location that has
not yet been given a value.

> We have this wording:
> >   This binds \hyper{variable} to a new location before assigning the
> >   value of \hyper{expression} to it.
> ... which seems to suggest that the location is only created when
> evaluation gets to the definition (and filled with an unspecified
> value), just before the rhs expression is evaluated.
> Am I right?

The present wording notwithstanding, all of the locations must be created
before any of the definition RHS expressions are evaluated to allow mutual
recursion, as in a letrec or letrec* expression.


More information about the R6RS mailing list