【问题标题】:What is the difference of λx. x (λy. y) and (λx. x) (λy. y)λx 有什么区别。 x (λy.y) 和 (λx.x) (λy.y)
【发布时间】:2020-11-02 06:20:05
【问题描述】:

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

我看不出区别,在这两种情况下,似乎 (λy.y) 应用于 (λx.x) 减少到 (λy.y),不是这样吗?

第一种情况的减法是什么?

【问题讨论】:

    标签: lambda-calculus


    【解决方案1】:

    我看不出区别,在这两种情况下,似乎 (λy.y) 应用于 (λx.x) 减少到 (λy.y),不是这样吗?

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

    但要回答你的问题——不。公式 λx.x λy.y 表示 λx。x(λy.y),表示λx.(x( λy.y));也就是说,它是一个接受参数 x(它是一个函数)的函数,将该参数应用于恒等函数 λyy ,并返回结果。

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

    • identity 是定义为的函数

      def identity(y):
          return y
      

      那么λyy表示identity

    • λx.xy.y) 表示

      lambda x: x(identity)
      

      例如,(λx.xy.y))(λ t.3) 是

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

      计算结果为3

    • x.x)(λy.y) 表示

      identity(identity)
      

      正如你所说,它简化为identity;所以 ((λx.x)(λy.y))(λt.3) 是

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

      计算结果为(lambda t: 3)

    • λx.x λy.y 表示 λxxy.y), notx.x)(λy.y).

    【讨论】:

    • 所以如果我做对了第一个是正常形式,我需要一个参数来应用它
    • 也感谢您的纠正我一直认为值被应用于函数 vilut 是相反的,谢谢!
    猜你喜欢
    • 2013-06-07
    • 2015-08-24
    • 2011-05-10
    • 2012-08-09
    • 2016-07-23
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    相关资源
    最近更新 更多