理系学生日記

おまえはいつまで学生気分なのか

問題3-15 (3.3.1 Mutable List Structure)

同じ出力を持つ 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)

片方だけしか変わらない.