この例の結果に少し混乱しています。
(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
アトムがプロシージャに置き換えられたのか疑問に思っていset-car!
ます (結果がどうなるかについての私の最初の推測は でした((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
の が置き換えられているのはなぜですか?