#|
(\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 k) (lambda (x y) (k (* x y))))
(define (decr k) (lambda (x) (k (- x 1))))
(define (equals s f) (lambda (x y) (if (= x y) (s) (f))))
((((lambda (g)
( (lambda (x) (x x))
(lambda (x) (g (lambda (k) ((x x) k))))))
(lambda (fact)
(lambda (k)
(lambda (n)
((equals (lambda () (k 1))
(lambda () ((decr (lambda (n1)
((fact
(lambda (f1) ((mult k) n f1)))
n1)))
n)))
n 0)))))
(lambda (x) (display x)))
5)
I3wKKFxnIC0+IChceC0+IHggeCkgKFx4LT4gZyAoXG4tPiAoeCB4KSBuKSkpCihcZmFjdCAtPiBcbiBrIC0+IAogICAgICAgICAgICAgICAoZXF1YWxzIG4gMCkKICAgICAgICAgICAgICAgICAoXFRydWUgLT4gayAxKSAKICAgICAgICAgICAgICAgICAoXEZhbHNlIC0+IGRlY3IgbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuMS0+IGZhY3QgbjEgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcZjEtPiBtdWx0IG4gZjEgaykpKSkKNSBkaXNwbGF5IHwjCgooZGVmaW5lIChtdWx0IGspIChsYW1iZGEgKHggeSkgKGsgKCogeCB5KSkpKQooZGVmaW5lIChkZWNyIGspIChsYW1iZGEgKHgpIChrICgtIHggMSkpKSkKKGRlZmluZSAoZXF1YWxzIHMgZikgKGxhbWJkYSAoeCB5KSAoaWYgKD0geCB5KSAocykgKGYpKSkpCgooKCgobGFtYmRhIChnKSAKICAgICAoIChsYW1iZGEgKHgpICh4IHgpKQogICAgICAgKGxhbWJkYSAoeCkgKGcgKGxhbWJkYSAoaykgKCh4IHgpIGspKSkpKSkKCiAgIChsYW1iZGEgKGZhY3QpCiAgICAobGFtYmRhIChrKQogICAgICAobGFtYmRhIChuKQogICAgICAgICgoZXF1YWxzICAobGFtYmRhICgpIChrIDEpKQogICAgICAgICAgICAgICAgICAobGFtYmRhICgpICgoZGVjciAobGFtYmRhIChuMSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGZhY3QgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoZjEpICgobXVsdCBrKSBuIGYxKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbjEpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4pKSkKICAgICAgICAgIG4gMCkpKSkpCgogICAobGFtYmRhICh4KSAoZGlzcGxheSB4KSkpIAogIDUpCg==