define-dynamic added by mario-goulart on Mon Mar 11 19:43:05 2013

(define-syntax define-dynamic
  (syntax-rules ()
    ((_ var value)
     (define var
       (let ((slot (lambda () value)))
         (lambda (#!optional new-value)
           (if new-value
               (set! slot (lambda () new-value))
               (slot))))))))

(define-dynamic foo 'foo)
(define-dynamic bar (foo))

(print (bar)) ;; => foo
(foo 'foo2)
(print (bar)) ;; => foo2

(parameterize ((foo 'foo3))
  (print (bar))) ;; => foo3