#|
(\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)) )
I3wKKFxnIC0+IChceC0+IHggeCkgKFx4LT4gZyAoXG4tPiAoeCB4KSBuKSkpCihcZmFjdCAtPiBcbiBrIC0+IAogICAgICAgICAgICAgICAoZXF1YWxzIG4gMCkKICAgICAgICAgICAgICAgICAoXFRydWUgLT4gayAxKSAKICAgICAgICAgICAgICAgICAoXEZhbHNlIC0+IGRlY3IgbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuMS0+IGZhY3QgbjEgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcZjEtPiBtdWx0IG4gZjEgaykpKSkKNSBkaXNwbGF5IHwjCgooZGVmaW5lIChtdWx0IGEgYiBrKSAoayAoKiBhIGIpKSkKKGRlZmluZSAoZGVjciBjIGspIChrICgtIGMgMSkpKQooZGVmaW5lIChlcXVhbHMgZCBlIHMgZikgKGlmICg9IGQgZSkgKHMpIChmKSkpCgooKChsYW1iZGEgKGcpIAogICAgICggKGxhbWJkYSAoeCkgKHggeCkpCiAgICAgICAobGFtYmRhICh4KSAoZyAobGFtYmRhIChuIGspICgoeCB4KSBuIGspKSkpKSkKCiAgKGxhbWJkYSAoZmFjdCkKICAgIChsYW1iZGEgKG4gaykKICAgICAgKGVxdWFscyBuIDAgKGxhbWJkYSAoKSAoayAxKSkKICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoKSAoZGVjciBuIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChuMSkgKGZhY3QgbjEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGYxKSAobXVsdCBuIGYxIGspKSkpKSkpKSkpCgogIDUgKGxhbWJkYSAoeCkgKGRpc3BsYXkgeCkpICkK