我正在阅读《第一原理的哈斯克尔》一书。在第12页上,我们正在学习如何减少lambda表达式。
我不明白的是为什么在步骤3中消失了λz和(λm.λn.m)之间的周期字符。当我在步骤3中将x替换为(λm.λn.m)时,我认为只有x应该被替换,而不是前面的句号。所以我本来期望 (λy.λz.(λm.λn.m)z(yz))(λp.p) 代替 (λy.λz(λm.λn.m)z(yz))(λp.p)
这是我的分析
(λxyz.xz(yz))(λm.λn.m)(λp.p)
明确指出。
(λx.λy.λz.xz(yz))(λm.λn.m)(λp.p)
替换x =(λm.λn.m)
(λy.λz.(λm.λn.m)z(yz))(λp.p)
替换y =(λp.p)
(λz。(λm.λn.m)z((λp.p)z))
我们现在观察到λz没有参数。所以剩下的就是减少(λm.λn.m)z((λp.p)z)
(λm.λn.m)z((λp.p)z)
替换m = z
(λn.z)((λp.p)z)
在这里,我们有λn.z(某物)。但是任何东西的λn.z都是z。 (由于λn.z的主体只是z,不包含n)
z
记住第4步前面的λz,最后得到
λz.z
因此,我们最终得到与本书相同的答案。
答案 0 :(得分:2)
肯定是肯定的错字。