为什么我在这个简单的方案代码中出现错误


(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(

对于ONESUCC函数。

如何修复我的代码以使其正常工作?

这是Church对数字的编码;数字K由函数CCD_ 3对某个自变量CCD_
(令人惊讶的是,函数和自变量的身份是不相关的——你可以毫不费力地构建所有数学。(

你可以选择合适的fx,例如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

相关内容

最新更新