Q.1: www.cs.purdue.edu/homes/palsberg/cs565/F99/IgarashiPierceWadler99.ps pages 6-7. Q.2: See Lecture Note 3. Q.3: Yes. Q.4: (define f (lambda (n) (if (> n 100) n (+ (f (+ n 1)) (f (+ n 2)))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define f-cps (lambda (n k) (if (> n 100) (k n) (f-cps (+ n 1) (lambda (v1) (f-cps (+ n 2) (lambda (v2) (k (+ v1 v2))))))))) (define f-cps-main (lambda (n) (f-cps n (lambda (x) x)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; (1 n ...) ;; (2 v1 ...) (define f-fo (lambda (n k) (if (> n 100) (apply-cont k n) (f-fo (+ n 1) (cons 1 (cons n k)))))) (define apply-cont (lambda (k x) (if (null? k) x (case (car k) ((1) (f-fo (+ (cadr k) 2) (cons 2 (cons x (cddr k))))) ((2) (apply-cont (cddr k) (+ (cadr k) x))))))) (define f-fo-main (lambda (n) (f-fo n '()))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define n 'dummy) (define k '()) (define x 'dummy) (define f-imp (lambda () (if (> n 100) (begin (set! x n) (apply-cont-imp)) (begin (set! k (cons 1 (cons n k))) (set! n (+ n 1)) (f-imp))))) (define apply-cont-imp (lambda () (if (null? k) x (case (car k) ((1) (begin (set! n (+ (cadr k) 2)) (set! k (cons 2 (cons x (cddr k)))) (f-imp))) ((2) (begin (set! x (+ (cadr k) x)) (set! k (cddr k)) (apply-cont-imp))))))) (define f-imp-main (lambda (n1) (set! n n1) (set! k '()) (f-imp))) END OF FILE