(define (fix1 F) ; finds fixed point of functional of form ; (lambda (f) (lambda (x) ...)) ; f(fix1 f) = (fix1 f) (letrec [(fix-of-F (F (lambda (x) (fix-of-F x))))] fix-of-F)) (define (fix2 F) ; finds fixed point of functional of form ; (lambda (f) (lambda (x y) ...)) ; f(fix2 f) = (fix2 f) (letrec [(fix-of-F (F (lambda (x y) (fix-of-F x y))))] fix-of-F)) (define FACT (lambda (f) (lambda (n) (if (zero? n) 1 (* n (f (- n 1))))))) (define APPEND (lambda (append) (lambda (x y) (if (null? x) y (cons (first x) (append (rest x) y)))))) (define bottom (lambda (n) (error "bottomed out with argument value" n))) (define fact1 (FACT bottom)) (define fact2 (FACT fact1)) (define fact3 (FACT fact2)) (define fact4 (FACT fact3)) (define fact5 (FACT fact4))