;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))