同じ出力を持つ z1 と z2.
(define x (list 'a 'b)) (define z1 (cons x x)) ; ((a b) a b) (define z2 (cons (list 'a 'b) (list 'a 'b))) ; ((a b) a b)
この両者に対して,set-to-wow! を適用する.
(define (set-to-wow! x) (set-car! (car x) 'wow) x)
実は,z1 のデータ構造は以下のように,(car z1) と (cdr z2) が同じものを参照しているので,
set-to-wow! を適用すると,両方が変わる.
(set-to-wow! z1) ; ((wow b) wow b)
z2 の方はこういう感じになってるので,
set-to-wow! を適用すると,
(set-to-wow! z2) ; ((wow b) a b)