Сначала давайте определим реальные церковные цифры, которые имеют желаемое свойство, которое 0 != 1
:
(define zero (lambda (f x) x))
(define (succ cn) (lambda (f x) (f (cn f x))))
Итак, zero
- это церковное представление 0, (succ zero)
из 1, (succ (succ zero))
из 2 и т. Д.
Теперь, поскольку это всего лишь функции, нет способа заставить repl отображать их в виде чисел, но вы можете определить функцию cn-to-int, которая преобразует церковные цифры в целые, которые затем могут отображаться нормально: 1010 *
> (define (cn-to-int cn) (cn (lambda (x) (+ x 1)) 0))
> (cn-to-int zero)
0
> (cn-to-int (succ zero))
1
> (cn-to-int (succ (succ zero)))
2