我试图通过Scheme来理解教会编码的整个原则。我认为我理解它的基础知识,例如
教会数字为0
(定义c-0 (lambda(f) (lambda(x) X)))
教会数字为1
(定义c-1 (lambda(f) (lambda(x) (f x))))
...并继续将该函数应用于x次N次。
现在我的问题是这一切意味着什么?如果我以教堂3为例:
(define c-3
(lambda (x)
(lambda (f)
(f (f (f x))))))
这实际上是做什么的?我也只有基本的计划知识,但我甚至不懂如何使用这个功能?什么是使用c-3函数的示例输入?它只是像循环那样应用3次?
答案 0 :(得分:1)
你是对的。在这种情况下,c-3是一个函数,它接受1个参数。并返回另一个函数。 该另一个函数采用1参数函数,并将其应用于第一个参数。
在这个例子中,我用参数3调用c-3,这将返回一个函数。 然后,我将这个函数,另一个函数,add1添加到x。
((c-3 3) (lambda (x) (add1 x)))
6
如您所见,这将产生6
。它适用于add1到3次,3次。我知道这很令人困惑。但是你可以
手动替换函数体中的参数以更好地理解它。无论您在哪里看到f,只需将其替换为(lambda (x) (add1 x))
并将x
替换为3
(或任何数字)。
只要参数的类型正确,这将适用于任何1个参数函数。