;; Solution for HW6 ;; CS3520, Fall 2001 (define (ex1 v1 v2) (let ([f (let ([x 1]) ;; remembered by f (lambda (y) (begin (set! x (* x y)) x)))]) (begin (f v1) (f v2)))) (define (ex2 v1 v2) (let ([mk (lambda () (let ([x 1]) ;; not shared by f & g (lambda (y) (begin (set! x (* x y)) x))))]) (let ([f (mk)] [g (mk)]) (begin (g v1) (f v2) (g 1))))) (define (ex3 v1 v2) (let ([mk (let ([x 1]) ;; shared by f & g (lambda () (lambda (y) (begin (set! x (* x y)) x))))]) (let ([f (mk)] [g (mk)]) (begin (f v1) (g v2) (g 1))))) (define (ex4 v1 v2 v3 v4) (let ([mk (let ([x 1]) ;; shared (lambda () (let ([z 1]) ;; not shared (lambda (y w) (begin (set! x (* x w)) (set! z (* z y)) (* z x))))))]) (let ([f (mk)] [g (mk)]) (begin (f v1 v2) (g v3 v4) (list (f 1 1) (g 1 1))))))