如何减少lambda表达

时间:2018-12-17 05:49:10

标签: haskell lambda

我正在阅读《第一原理的哈斯克尔》一书。在第12页上,我们正在学习如何减少lambda表达式。

enter image description here

我不明白的是为什么在步骤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)

这是我的分析


  1. (λxyz.xz(yz))(λm.λn.m)(λp.p)

    明确指出。

  2. (λx.λy.λz.xz(yz))(λm.λn.m)(λp.p)

    替换x =(λm.λn.m)

  3. (λy.λz.(λm.λn.m)z(yz))(λp.p)

    替换y =(λp.p)

  4. (λz。(λm.λn.m)z((λp.p)z))

    我们现在观察到λz没有参数。所以剩下的就是减少(λm.λn.m)z((λp.p)z)

  5. (λm.λn.m)z((λp.p)z)

    替换m = z

  6. (λn.z)((λp.p)z)

    在这里,我们有λn.z(某物)。但是任何东西的λn.z都是z。 (由于λn.z的主体只是z,不包含n)

  7. z

    记住第4步前面的λz,最后得到

  8. λz.z

    因此,我们最终得到与本书相同的答案。

1 个答案:

答案 0 :(得分:2)

肯定是肯定的错字。