cons, car, cdr, set-car!, set-cdr! を local state と assignment で実現した以下の関数セット.
(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)