我尝试理解lambda演算并阅读精彩的article。
在第8页上,有一个表达式:
(λy.(x(λx.xy)))
如果我打算用(λy)
替换最左边的t
,
(λy.(x(λx.xy))) t
然后结果会是?
x(λx.xy)
答案 0 :(得分:1)
我冒昧地将其重写为haskell语法
(\y -> x (\x-> x y))
(\y -> x (\x-> x y)) t
x (\x -> x t)
因为y已经绑定到输入\ y所有y将被t替换。
编辑:如下面的评论中所述,如果t包含一个空闲的x,那么将此范围内的绑定x重命名为" fresh"名称。这个名字目前没有任何意义。如果我们说
let t = \t -> x t
然后正确的替换看起来像
x (\z -> z (\t -> x t))
如pigworker
所述,选择某些z
作为新鲜标识符来替换我们的绑定x以防止将自由x隐藏在t中。