If expression is specified, evaluates expression and stores
the resulting value in the location to which variable is bound.
If expression is omitted, variable is altered to be
unassigned; a subsequent reference to such a variable is an error.
In either case, the value of the
set! expression is unspecified.
Variable must be bound either in some region enclosing the
set! expression, or at the top level. However, variable is
permitted to be unassigned when the
set! form is entered.
(define x 2) ⇒ unspecified (+ x 1) ⇒ 3 (set! x 4) ⇒ unspecified (+ x 1) ⇒ 5
Variable may be an
(see Environments). This allows you to assign variables in an
arbitrary environment. For example,
(define x (let ((y 0)) (the-environment))) (define y 'a) y ⇒ a (access y x) ⇒ 0 (set! (access y x) 1) ⇒ unspecified y ⇒ a (access y x) ⇒ 1