(define !
(lambda (n)
((lambda (n)
((n (lambda (x) (+ x 1))) 0))
((lambda (n)
((lambda (p)
(p (lambda (x)
(lambda (y)
y))))
((n (lambda (p)
(((lambda (x)
(lambda (y)
(lambda (fun)
((fun x) y))))
((lambda (n)
(lambda (f)
(lambda (x)
(f ((n f) x)))))
((lambda (p)
(p (lambda (x)
(lambda (y)
x)))) p)))
(((lambda (x)
(lambda (y)
((y ((lambda (x)
(lambda (y)
((y (lambda (n)
(lambda (f)
(lambda (x)
(f ((n f) x)))))) x))) x))
(lambda (f)
(lambda (x)
x)))))
((lambda (p)
(p (lambda (x)
(lambda (y)
x)))) p))
((lambda (p)
(p (lambda (x)
(lambda (y)
y)))) p)))))
(((lambda (x)
(lambda (y)
(lambda (fun)
((fun x) y))))
((lambda (n)
(lambda (f)
(lambda (x)
(f ((n f) x)))))
(lambda (f)
(lambda (x)
x))))
((lambda (n)
(lambda (f)
(lambda (x)
(f ((n f) x)))))
(lambda (f)
(lambda (x)
x)))))))
(((lambda (i-n)
(lambda (n)
(i-n i-n n)))
(lambda (loop n)
(if (zero? n)
(lambda (f)
(lambda (x)
x))
((lambda (n)
(lambda (f)
(lambda (x)
(f ((n f) x)))))
(loop loop (- n 1)))))) n)))))
|