溶解 lambda 演算
Dissolve lambda calculus
我有以下 lambda 演算:
(λx. + (- x 1)) 9 3
正确的 beta reduce 是:
+ (- 9 1) 3
我弄错了,把 9 换成了 3:
+ (- 3 1) 9
我得到了相同的结果。
直到将它与解决方案进行比较,我才意识到这是错误的。
我是否必须采用最接近的替换,在本例中为 9?
是的,您始终需要将 lambda 应用于其 "first"(最左边的)参数。
理论上不存在多参数,只有单参数的应用。仍然,写是很常见的
f M N O
重复申请 (((f M) N) O)
。请注意 f
如何将 M
作为其参数。
在一般情况下,如果您以不同的顺序进行申请,您将不会得到相同的结果。你的例子只是一个事件。
你在这个算术例子中得到相同的答案是算术的巧合,而不是 lambda 演算。
如果你写了更多的空格,使术语结构更清晰,就更容易看出是怎么回事了
(\x. + (- x 1)) 9 3
意味着,用无偿的额外括号显示解析树,
((\x. (+ (- x 1))) 9) 3
因为应用程序关联到左侧("rather as we all did in the sixties" - Roger Hindley)。
所以,用 3 代替 x 的位置是错误的。我们只有
( (\x. (+ (- x 1))) 9 ) 3
=
(+ (- 9 1)) 3
=
(+ 8) 3
=
11
我有以下 lambda 演算:
(λx. + (- x 1)) 9 3
正确的 beta reduce 是:
+ (- 9 1) 3
我弄错了,把 9 换成了 3:
+ (- 3 1) 9
我得到了相同的结果。
直到将它与解决方案进行比较,我才意识到这是错误的。
我是否必须采用最接近的替换,在本例中为 9?
是的,您始终需要将 lambda 应用于其 "first"(最左边的)参数。
理论上不存在多参数,只有单参数的应用。仍然,写是很常见的
f M N O
重复申请 (((f M) N) O)
。请注意 f
如何将 M
作为其参数。
在一般情况下,如果您以不同的顺序进行申请,您将不会得到相同的结果。你的例子只是一个事件。
你在这个算术例子中得到相同的答案是算术的巧合,而不是 lambda 演算。
如果你写了更多的空格,使术语结构更清晰,就更容易看出是怎么回事了
(\x. + (- x 1)) 9 3
意味着,用无偿的额外括号显示解析树,
((\x. (+ (- x 1))) 9) 3
因为应用程序关联到左侧("rather as we all did in the sixties" - Roger Hindley)。
所以,用 3 代替 x 的位置是错误的。我们只有
( (\x. (+ (- x 1))) 9 ) 3
=
(+ (- 9 1)) 3
=
(+ 8) 3
=
11