如何阅读或解释Lambda中的Lambda

Ste*_*eve 4 python lambda

我试图理解嵌套的lambda:

f = lambda x, y: y(y(x))
g = lambda x : lambda y: x(y)
print( f(lambda x: x+1, g) (4) )
Run Code Online (Sandbox Code Playgroud)

我被告知此代码打印为"5".这是如何解释的,如何(4)在最后一行解析?

根据我对lambda的理解,如果,

h = lambda a, b : a+b
Run Code Online (Sandbox Code Playgroud)

我知道这print(h(1,2))将给出3作为a = 1,b = 2,并继续a + b = 1 + 2 = 3

che*_*ner 5

f(lambda x: x+1, g)最终返回另一个功能.函数然后用4称为作为它的参数,以产生5的最终结果.


h = lambda x: x + 1,因为否则会变得一团糟.

首先,我们适用fhg.

f(h, g)(4) == (lambda x,y: y(y(x))(h, g)(4)
           == g(g(h))(4)
Run Code Online (Sandbox Code Playgroud)

接下来,我们将评估内部调用g:

g(g(h))(4) == g((lambda x: lambda y: x(y))(h))(4)
           == g(lambda y: h(y))(4)
           == g(h)(4)
Run Code Online (Sandbox Code Playgroud)

最后一步是eta减少的一个例子,使用来自lambda演算的术语:将第二个函数应用于参数的函数等同于第二个函数本身.

最后,我们g(h)再次以相同的方式进行评估,最终使我们得到一个不涉及将函数作为参数传递的表达式,并让我们得到最终答案.

g(h)(4) == (lambda y: h(y))(4)
        == h(4)
        == (lambda x: x + 1)(4)
        == 4 + 1
        == 5
Run Code Online (Sandbox Code Playgroud)