代码之家  ›  专栏  ›  技术社区  ›  geckos

x(y)和(x)(y)的差值是多少

  •  0
  • geckos  · 技术社区  · 4 年前

    Lambda表达式尽可能向右延伸。例如 x.xy.y与x.x(y.y)相同,但与(x.x)(y.y)不同。

    我看不出有什么区别,在这两种情况下,(y.y)似乎都适用于(x.x),并简化为(y.y),不是吗?

    第一个案例的减少幅度是多少?

    0 回复  |  直到 4 年前
        1
  •  3
  •   ruakh    4 年前

    我看不出有什么区别,在这两种情况下,(y.y)似乎都适用于(x.x),并简化为(y.y),不是吗?

    我认为你的意思是写“(x.x)适用于(y.y)”,而不是相反。(我们说一个函数被“应用”到它的参数上,而不是相反。)

    但要回答你的问题,答案是否定的。公式 x . x y . y 方法 x . x ( y . y ),这意味着 x .( x ( y . y )); 也就是说,它是一个接受参数的函数 x (这是一个函数)将该参数应用于恒等式函数 y . y ,并返回结果。

    我看到你知道Python,所以用Python的术语来说:

    • identity 函数定义为

      def identity(y):
          return y
      

      那么 y . y 方法 身份 .

    • x . x ( y . y )手段

      lambda x: x(identity)
      

      例如( x . x ( y . y ))( t .3)是

      (lambda x: x(identity))(lambda t: 3)
      

      其评估结果为 3 .

    • ( x . x )( y . y )手段

      identity(identity)
      

      正如你所说,这可以简化为 身份 ; 所以(( x . x )( y . y ))( t .3)是

      (identity(identity))(lambda t: 3)
      

      其评估结果为 (lambda t: 3) .

    • x . x y . y 方法 x . x ( y . y ), ( x . x )( y . y ).