(define ZERO (lambda (f x) x))
(define ONE (lambda (f x) (f x)))
(define SUCC (lambda (n) (lambda (f x) (f (n f x)))))
(display (ZERO 1 0))
(display (ONE 1 0))
(display ((SUCC ZERO) 1 0))
ZERO功能工作正常。当我运行这个代码时,我得到一个错误,
错误:无效应用程序:(10(
对于ONE
、SUCC
函数。
如何修复我的代码以使其正常工作?
这是Church对数字的编码;数字K由函数CCD_ 3对某个自变量CCD_
(令人惊讶的是,函数和自变量的身份是不相关的——你可以毫不费力地构建所有数学。(
你可以选择合适的f
和x
,例如0
和
(define (inc x) (+ x 1))
因此,数字K是通过将1,K乘以0来表示的。
> (ZERO inc 0)
0
> (ONE inc 0)
1
> ((SUCC ONE) inc 0)
2
您还可以通过评估功能添加一些便利:
> (define (number n) (n inc 0))
> (number ZERO)
0
> (number ONE)
1
> (number (SUCC (SUCC (SUCC (SUCC ONE)))))
5