;given definitions
(define zero (lambda (f) (lambda (x) x)))
(define (add-1 n)
(lambda (f) (lambda (x) (f ((n f) x)))))
; exercise 2.6: define one and two directly -
; not in terms of zero or add-1
(define one
(lambda (f) (lambda (x) (f x))))
(define two
(lambda (f) (lambda (x) (f (f x)))))
(define (church-plus a b)
((a (lambda (n) (lambda (f) (lambda (x) (f ((n f) x)))))) b))
(define (church->integer a)
((a add1) 0))
(display (church->integer zero))
O2dpdmVuIGRlZmluaXRpb25zCihkZWZpbmUgemVybyAobGFtYmRhIChmKSAobGFtYmRhICh4KSB4KSkpCihkZWZpbmUgKGFkZC0xIG4pCiAgKGxhbWJkYSAoZikgKGxhbWJkYSAoeCkgKGYgKChuIGYpIHgpKSkpKQo7IGV4ZXJjaXNlIDIuNjogZGVmaW5lIG9uZSBhbmQgdHdvIGRpcmVjdGx5IC0KOyBub3QgaW4gdGVybXMgb2YgemVybyBvciBhZGQtMQooZGVmaW5lIG9uZQogIChsYW1iZGEgKGYpIChsYW1iZGEgKHgpIChmIHgpKSkpCgooZGVmaW5lIHR3bwogIChsYW1iZGEgKGYpIChsYW1iZGEgKHgpIChmIChmIHgpKSkpKQoKKGRlZmluZSAoY2h1cmNoLXBsdXMgYSBiKQogICgoYSAobGFtYmRhIChuKSAobGFtYmRhIChmKSAobGFtYmRhICh4KSAoZiAoKG4gZikgeCkpKSkpKSBiKSkKCihkZWZpbmUgKGNodXJjaC0+aW50ZWdlciBhKQogICgoYSBhZGQxKSAwKSkKCihkaXNwbGF5IChjaHVyY2gtPmludGVnZXIgemVybykp