(define (ex1 v1 v2) (let ([f (let ([l '()]) (lambda (x) (set! l (cons x l)) l))]) (begin (f v1) (f v2)))) (define (ex2 v1 v2) (let ([mk (let ([l '()]) (lambda () (lambda (x) (set! l (append l x)) l)))]) (let ([f (mk)] [g (mk)]) (begin (f (list v1)) (g (list v2)) (g '()))))) (define (ex3 v1 v2) (let ([mk (lambda () (let ([l '()]) (lambda (x) (set! l (append l x)) l)))]) (let ([f (mk)] [g (mk)]) (begin (g (list v1)) (f (list v2)) (g '()))))) (define (ex4 v1 v2 v3 v4) (let ([mk (let ([l '()] [combine (lambda (x y) (append y x))]) (lambda () (let ([l2 '()] [combine2 combine]) (set! combine append) (lambda (x y) (set! l (append l y)) (set! l2 (append l2 x)) (combine2 l l2)))))]) (let ([f (mk)] [g (mk)]) (begin (f (list v1) (list v2)) (g (list v3) (list v4)) (list (f '() '()) (g '() '()))))))