6.001 Structure and Interpretation of Computer Programs
Recitation #16
Wednesday, November 3, 2004

Review

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)