Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Lambda中阅读或解释Lambda_Python_Lambda - Fatal编程技术网

Python 如何在Lambda中阅读或解释Lambda

Python 如何在Lambda中阅读或解释Lambda,python,lambda,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) ) 有人告诉我这个密码是“5”。如何解释这一点,以及如何解析最后一行中的(4) 根据我对lambda的理解,如果 h = lambda a, b : a+b 我知道print(h(1,2))会给出3 当a=1,b=2时,继续a+b=1+2=3f(λx:x+1,g)最终返回另一个函数。然后用4

我试图理解嵌套的lambda:

f = lambda x, y: y(y(x))
g = lambda x : lambda y: x(y)
print( f(lambda x: x+1, g) (4) )
有人告诉我这个密码是“5”。如何解释这一点,以及如何解析最后一行中的
(4)

根据我对lambda的理解,如果

h = lambda a, b : a+b
我知道
print(h(1,2))
会给出3 当a=1,b=2时,继续a+b=1+2=3

f(λx:x+1,g)
最终返回另一个函数。然后用4作为参数调用该函数,以生成5的最终结果


h=lambda x:x+1
,因为这将成为一个混乱的跟踪

首先,我们将
f
应用于
h
g

f(h, g)(4) == (lambda x,y: y(y(x))(h, g)(4)
           == g(g(h))(4)
接下来,我们将评估对
g
的内部调用:

g(g(h))(4) == g((lambda x: lambda y: x(y))(h))(4)
           == g(lambda y: h(y))(4)
           == g(h)(4)
最后一步是eta缩减的示例,使用lambda演算中的一个术语:将第二个函数应用于参数的函数与第二个函数本身等价

最后,我们再次以同样的方式计算
g(h)
,最终得到一个表达式,它不涉及将函数作为参数传递,并让我们得到最终答案

g(h)(4) == (lambda y: h(y))(4)
        == h(4)
        == (lambda x: x + 1)(4)
        == 4 + 1
        == 5

让我们试着扩展逻辑。首先,我将重命名一些参数名称以区分两个函数:

f = lambda i, j: j(j(i))
g = lambda x: lambda y: x(y)
现在
f(λx:x+1,g)
相当于:

h = (lambda i, j: j(j(i)))(lambda x: x+1, g)
def h(x):
    return x+1
def f(x, y):
    return y(y(x))
def g(x):
    def new_func(y):
        return x(y)
    return new_func
这里是一个用作参数的函数。这很好,因为函数是Python中的一流对象,可以通过这种方式传递。因此,评估这一点:

h = g(g(lambda x: x+1))
但是
g
一点也不奇怪,它只是取一个函数并将其应用于一个参数。它可以被视为一个“同一”函数,函数作为参数。你可以完全摆脱
g
。因此,我们:

h = (lambda x: x+1)

换句话说,
h
只是将一个值添加到任何输入。

h=lambda x:x+1
是一个比传递给它的值多返回1的函数
它相当于:

h = (lambda i, j: j(j(i)))(lambda x: x+1, g)
def h(x):
    return x+1
def f(x, y):
    return y(y(x))
def g(x):
    def new_func(y):
        return x(y)
    return new_func

f=lambda x,y:y(y(x))
是一个函数,它将值和函数作为一对参数,并计算函数(函数(值))
这相当于:

h = (lambda i, j: j(j(i)))(lambda x: x+1, g)
def h(x):
    return x+1
def f(x, y):
    return y(y(x))
def g(x):
    def new_func(y):
        return x(y)
    return new_func

g=lambda x:lambda y:x(y)
是一个装饰函数,根据传递给它的函数返回一个新函数。

它相当于:

h = (lambda i, j: j(j(i)))(lambda x: x+1, g)
def h(x):
    return x+1
def f(x, y):
    return y(y(x))
def g(x):
    def new_func(y):
        return x(y)
    return new_func


给定的lambda表达式

f = lambda x, y: y(y(x))
g = lambda x : lambda y: x(y)

要计算的表达式

   f(lambda x: x+1, g) (4)
这减少到

=> g(g(lambda x: x+1)) (4)
现在注意g(g(lambda x:x+1))返回一个函数g(lambda x:x+1)

现在g(λx:x+1)再次返回一个函数(x+1)

计算结果为4+1,即5

=> 5

是否有可能进行逐步分析?我还是个新手,所以这让meDone很困惑:)这已经够棘手了,我想得到TL;在进行精确评估之前,先升级DR版本。Python2用于提供
g
的未编译版本;它被称为
apply
apply(f,x)=f(x)
。我认为
g
是一条红鲱鱼,它只是一个身份函数(在高阶函数空间中),不是吗?
x
被限制为beta抽象,所以它只是一根头发,而不是身份函数。但是,是的,非常接近。问得好!!