#|
(\g -> (\x-> x x) (\x-> g (\n-> (x x) n)))
(\fact -> \n k -> 
               (equals n 0)
                 (\True -> k 1) 
                 (\False -> decr n 
                                 (\n1-> fact n1 
                                             (\f1-> mult n f1 k))))
5 display |#

(define (mult a b k) (k (* a b)))
(define (decr c k) (k (- c 1)))
(define (equals d e s f) (if (= d e) (s) (f)))

(((lambda (g) 
     ( (lambda (x) (x x))
       (lambda (x) (g (lambda (n k) ((x x) n k))))))

  (lambda (fact)
    (lambda (n k)
      (equals n 0 (lambda () (k 1))
                  (lambda () (decr n 
                                    (lambda (n1) (fact n1
                                                       (lambda (f1) (mult n f1 k))))))))))

  5 (lambda (x) (display x)) )
