Python 成功函数的定义

Python 成功函数的定义,python,functional-programming,scheme,lisp,sicp,Python,Functional Programming,Scheme,Lisp,Sicp,在教堂数字中,如果我们有: # (define zero (lambda (f) (lambda (x) x))) zero = lambda f: lambda x: x 然后,后续函数可以定义为: # (define succ (lambda (n) (lambda (f) (lambda (x) (f ((n f) x)))))) succ = lambda n: lambda f: lambda x: f(n(f)(x)) 也许这是一个愚蠢的问题,但如果继任者实质上增加了一个包装器f

在教堂数字中,如果我们有:

# (define zero (lambda (f) (lambda (x) x)))
zero = lambda f: lambda x: x
然后,后续函数可以定义为:

# (define succ (lambda (n) (lambda (f) (lambda (x) (f ((n f) x))))))
succ = lambda n: lambda f: lambda x: f(n(f)(x))
也许这是一个愚蠢的问题,但如果继任者实质上增加了一个包装器f。。。对于前面的等式,为什么不能将其定义为fn?这是为了定义的一致性,还是为什么不能使用较短的形式

注意:在这里使用python定义以及scheme,这使我的测试更加简单。

数字n被定义为函数f对某个参数x的n个应用程序

因此,

请注意,1与λf、λx.f 0不同,因此such 0也不能相同。其他数字也是如此

你的定义,λn,λf,λx.fn会给出

succ 0 = (λn.λf.λx.(f n)) (λg.λy.y)
       = λf.λx.f (λg.λy.y)
这和1不一样,但是

 (λn.λf.λx.f (n f x)) (λg.λy.y)
= λf.λx.f ((λg.λy.y) f x)
= λf.λx.f ((λy.y) x)
= λf.λx.f x
= 1
数字n被定义为函数f对某个参数x的n个应用

因此,

请注意,1与λf、λx.f 0不同,因此such 0也不能相同。其他数字也是如此

你的定义,λn,λf,λx.fn会给出

succ 0 = (λn.λf.λx.(f n)) (λg.λy.y)
       = λf.λx.f (λg.λy.y)
这和1不一样,但是

 (λn.λf.λx.f (n f x)) (λg.λy.y)
= λf.λx.f ((λg.λy.y) f x)
= λf.λx.f ((λy.y) x)
= λf.λx.f x
= 1