【发布时间】: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
Lambda 表达式尽可能向右延伸。例如 λx。 xλy。 y 与 λx 相同。 x(λy.y),和(λx.x)(λy.y)不一样。
我看不出区别,在这两种情况下,似乎 (λy.y) 应用于 (λx.x) 减少到 (λy.y),不是这样吗?
第一种情况的减法是什么?
【问题讨论】:
标签: lambda-calculus
我看不出区别,在这两种情况下,似乎 (λ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表示identity。
λ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)
正如你所说,它简化为identity;所以 ((λx.x)(λy.y))(λt.3) 是
(identity(identity))(lambda t: 3)
计算结果为(lambda t: 3)。
λx.x λy.y 表示 λx。 x(λy.y), not (λx.x)(λy.y).
【讨论】: