6.001 Structure and Interpretation of Computer Programs
Recitation
#16
Wednesday, November 3, 2004
Review
- environment diagrams: frames, bindings, lambda double-bubbles
- rules for evaluation in environment model
Practice
Evaluate the following expressions, drawing the corresponding
environment diagram in the space on the right.
1. (define (fact n)
(if (= n 1)
1
(* n (fact (- n 1)))))
(define n 6)
(fact 3)
2.
(define x 4)
(let ((x (+ 2 1))
(y (square x)))
(* x y))
3.
(define make-counter
(lambda ()
(let ((count 0))
(lambda ()
(set! count (+ 1 count))
count))))
(define days (make-counter))
(define dollars (make-counter))
(days)
(days)
(dollars)
(dollars)
4.
(define make-count-proc-1
(lambda (f)
(lambda (x)
(let ((count 0))
(cond ((eq? x 'count) count)
(else (set! count (+ count 1))
(f x)))))))
(define sqrt* (make-count-proc-1 sqrt))
(sqrt* 4)
(sqrt* 'count)
5.
(define make-count-proc-2
(lambda (f)
(let ((count 0))
(lambda (x)
(cond ((eq? x 'count) count)
(else (set! count (+ count 1))
(f x)))))))
(define sqrt* (make-count-proc-2 sqrt))
(define square* (make-count-proc-2 square))
(sqrt* 4)
(sqrt* 'count)
(square* 4)
(square* 'count)
6.
(define make-count-proc-3
(let ((count 0))
(lambda (f)
(lambda (x)
(cond ((eq? x 'count) count)
(else (set! count (+ count 1))
(f x)))))))
(define sqrt* (make-count-proc-3 sqrt))
(define square* (make-count-proc-3 square))
(sqrt* 4)
(sqrt* 'count)
(square* 4)
(square* 'count)