Вектора не копируются в замыкания, насколько я понимаю, точней копируются, но по ссылкам. Они нарушают локальность.
(define chng (lambda(x) (vector-set! x 0 "foo")))
(define v '#(1 2 3))
(chng v)
(write v)
(newline)
;Для сравнения:
(define chng (lambda(x) (set! x 100)))
(define a 1)
(define l '(1 2 3))
(chng a)
(chng l)
(write a)
(newline)
(write l)
out:
#("foo" 2 3)
1
(1 2 3)
Почему так было сделано? Есть на это причины?
ЗЫ к слову, массивы в JS сделаны точно также.