SICP 読み (105) 3.3.1 可変リスト構造

微妙な現実トウヒの成果を控えておきます (を

問題 3.20

マンガは略で、落書きを元にしたポイントを以下に列挙。
まず、(define x (cons 1 2)) で E1 という環境が作られて x が指す dispatch 手続きからの戻りが反映される形に。E1 の x は 1 で y が 2 になる、と。
次に (define z (cons x x)) で E2 という環境が作られて z が指す dispatch 手続きからの戻りが反映される形になる。E2 の x も y も x という値を持って良いのかな。
で、(set-car! (cdr z) 17) がややこしい。

  • E3 (call to set-car!) が作られる。z の値は (cdr z) で new-value の値は 17 となる。E3 自体は global env に戻るのだろうか
  • E4 (call to cdr) が作られる。z の値は z であり、E3 環境に (cdr z) の結果 (値は x) を戻す??
  • E5 (call to dispatch) が作られる (x な dispatch)。m の値は 'set-car! となる。
  • E6 (call to set-x!) が作られる (E1 の set-x!)。この環境は E1 の x に影響を与える。ちなみに引数 v は 17 となる


これで、E1 の x が 17 になる、と。


で、次は (car x) ですが

  • E7 (call to car) が作られる。x の値は x (という書き方で良いのかなぁ)。
  • E8 (call to dispatch) が作られる (x な dispatch)。m の値は 'car になる。grobal env に 17 を戻す


ちょっと、これ系のマンガ問題微妙。