【发布时间】:2021-06-08 02:15:45
【问题描述】:
所以我有这个 lambda 表达式:(λf.λx.f(f(f(x)))) (λg.λy.g(g(y)))(λz.z + 1)(0),我正在尝试手动评估它。他们的想法是(λf.λx.f(f(f(x)))) 基本上代表表达式f(f(f(x)))。然后同样(λg.λy.g(g(y))) 代表表达式g(g(y))。然后传入g(g(y)) 替换f。所以我们得到g(g(g(g(g(g(y))))))。或g 与自己组成6 次。然后我们将z+1 传递给g,然后将0 插入到最后的表达式中,最后得到6。
>>>(((lambda f: lambda x: f(f(f(x))))(lambda g: lambda y: g(g(y))))(lambda z: z+1))(0)
8
问题是,当我使用 python 的内置 lambda 演算工具验证这个答案时,我得到 8 作为答案。
很明显,我的评估是错误的。我正在考虑将 2 g 组合物乘以 3 f 组合物得到 6。但显然我应该将其视为 2^3 组合物,但我不明白为什么。
【问题讨论】:
-
顺便说一句,将 lambda 表达式转换为 Python 的出色工作。 lambda 演算有几个微妙之处,您似乎很了解语义,能够将其无缝转换为具体的编程语言。
标签: python lambda lambda-calculus