Blame


1 665c255d 2023-08-04 jrmu (define (cons x y)
2 665c255d 2023-08-04 jrmu (define (set-x! v) (set! x v))
3 665c255d 2023-08-04 jrmu (define (set-y! v) (set! y v))
4 665c255d 2023-08-04 jrmu (define (dispatch m)
5 665c255d 2023-08-04 jrmu (cond ((eq? m 'car) x)
6 665c255d 2023-08-04 jrmu ((eq? m 'cdr) y)
7 665c255d 2023-08-04 jrmu ((eq? m 'set-car!) set-x!)
8 665c255d 2023-08-04 jrmu ((eq? m 'set-cdr!) set-y!)
9 665c255d 2023-08-04 jrmu (else (error "Undefined operation -- CONS" m))))
10 665c255d 2023-08-04 jrmu dispatch)
11 665c255d 2023-08-04 jrmu (define (car z) (z 'car))
12 665c255d 2023-08-04 jrmu (define (cdr z) (z 'cdr))
13 665c255d 2023-08-04 jrmu (define (set-car! z new-value)
14 665c255d 2023-08-04 jrmu ((z 'set-car!) new-value)
15 665c255d 2023-08-04 jrmu z)
16 665c255d 2023-08-04 jrmu (define (set-cdr! z new-value)
17 665c255d 2023-08-04 jrmu ((z 'set-cdr!) new-value)
18 665c255d 2023-08-04 jrmu z)
19 665c255d 2023-08-04 jrmu
20 665c255d 2023-08-04 jrmu ;; Exercise 3.20. Draw environment diagrams to illustrate the evaluation of the sequence of expressions
21 665c255d 2023-08-04 jrmu
22 665c255d 2023-08-04 jrmu (define x (cons 1 2))
23 665c255d 2023-08-04 jrmu (define z (cons x x))
24 665c255d 2023-08-04 jrmu (set-car! (cdr z) 17)
25 665c255d 2023-08-04 jrmu (car x)
26 665c255d 2023-08-04 jrmu 17
27 665c255d 2023-08-04 jrmu