Небольшая непонятка.
Когда мы говорим о лексической области видимости мы как-бы подразумеваем следующее: функция «запомнила» значения переменных из всей цепочки замыканий на момент определения. Когда она будет вызвана, она не будет видеть текущий контекст, а брать значения переменных из того контекста в котором была определена. Но что же происходит в следующем коде:
(define a 1)
(define tst (lambda() (write a)))
(define a 10)
(tst)
10