【发布时间】:2012-04-18 06:21:16
【问题描述】:
如果您要阅读问题陈述,例如在 TopCoder 上找到的内容,并将其转换为 lambda 演算表示,那么将其“转换”为 Haskell 或 Lisp 代码是否是一个简单的练习?
换句话说,是否可以使用 lambda 演算形式系统解决问题,然后用函数式编程语言轻松实现?
【问题讨论】:
-
我相信(但不能/不会证明)将用简单类型的 lambda 演算编写的任何程序转换为 Haskell 是微不足道的(您可以在无类型的 lambda 演算中编写一些函数你不能用 Haskell 写)。 Glasgow Haskell deugars to SystemF - 粗略地说是简单类型的 lambda 演算的更强大版本 - 所以 Haskell 已经“包含”了 STLC。您的翻译只需要转换为未加糖的 Haskell 的一小部分子集 - 自然,结果会非常冗长且不惯用。
-
@stephentetley:事实上没有什么可以证明的。翻译很简单,
λx:τ. M被翻译成\(x :: τ) -> M并且函数应用程序M N保持不变。无类型的 lambda 演算会出现问题,因为有些术语在没有滚动/展开无限类型的情况下无法输入(非常好的示例是Y组合器)。
标签: haskell functional-programming lisp lambda-calculus