我有以下lambda演算:
(λx. + (- x 1)) 9 3
正确的beta降低是:
+ (- 9 1) 3
我犯了一个错误,取而代之的是9号:
+ (- 3 1) 9
我得到了同样的结果。
我没有意识到这是错的,直到将它与解决方案进行比较。
我必须采取最接近的替代,在这种情况下是9吗?
答案 0 :(得分:7)
你在这个算术例子中得到相同答案的事实是由算术而不是lambda演算引起的巧合。
如果你写了更多的空格来使术语结构更清晰,那么就会更容易看出发生了什么
(\x. + (- x 1)) 9 3
表示用无偿的额外括号显示解析树,
((\x. (+ (- x 1))) 9) 3
因为应用程序与左侧相关联(“而不是像我们六十年代所做的那样” - Roger Hindley)。
所以,3是在错误的地方替换x。我们只有
( (\x. (+ (- x 1))) 9 ) 3
=
(+ (- 9 1)) 3
=
(+ 8) 3
=
11
答案 1 :(得分:1)
是的,你总是需要将lambda应用到它的“第一个”(最左边)参数。
理论上,没有多个参数这样的东西,只有一个参数的应用。尽管如此,写作仍然很常见
f M N O
重复申请(((f M) N) O)
。请注意f
如何将M
作为其参数。
在一般情况下,如果您以不同的顺序执行申请,则不会得到相同的结果。你的例子只是一个事件。