Меня немного смущает результат этого примера:
(define mk-q
(lambda ()
(let ([l '(x)])
(cons l l))))
(define q (mk-q))
q
=> ((x) x)
(set-car! (cdr q) 'y)
=> ((y) y)
Мне интересно, почему оба атома x
были заменены на набор-автомобиль! Процедура
(мое первое предположение о том, каким будет результат, было ((x) y)
)?
Например:
(define mk-q2
(lambda ()
(let ([l '(x)])
(cons l (cons l l)))))
(define q2 (mk-q2))
(set-car! (cdr q2) 'y)
=> ((x) y x) which fits my understanding of set-car!
Почему оба x
s в первом примере заменены?