SICP問題3.20

教科書で定義されている可変データによる対の手続

(define (cons x y)
  (define (set-x! v) (set! x v))
  (define (set-y! v) (set! y v))
  (define (dispatch m)
    (cond ((eq? m 'car) x)
          ((eq? m 'cdr) y)
          ((eq? m 'set-car!) set-x!)
          ((eq? m 'set-cdr!) set-y!)
          (else (error "Undefined operation -- CONS" m))))
  dispatch)
(define (car z) (z 'car))
(define (cdr z) (z 'cdr))
(define (set-car! z new-value)
  ((z 'set-car!) new-value)
  z)
(define (set-cdr! z new-value)
  ((z 'set-cdr!) new-value)
  z)

以下の一連の式の評価を示す環境の図を描け

(define x (cons 1 2))
(define z (cons x x))
(set-car! (cdr z) 17)
(car x)

対の手続きを定義した後の環境

(define x (cons 1 2))

(define z (cons x x))

(set-car! (cdr z) 17)

(car x)