Haskell 一旦在lambda演算中找到了解决方案,将其转换为代码有多容易?

Haskell 一旦在lambda演算中找到了解决方案,将其转换为代码有多容易?,haskell,functional-programming,lisp,lambda-calculus,Haskell,Functional Programming,Lisp,Lambda Calculus,如果您要阅读一个问题语句,例如在TopCoder上找到的内容,并将其转换为lambda演算表示,将其“转换”为Haskell或Lisp代码是一个简单的练习吗 换句话说,一个问题能用lambda演算形式系统解决,然后用函数式编程语言实现吗?这是一个困难的问题。理论上,是的。实际上,有点像。一般来说,我会说定义的可计算函数可以有效地实现(在程序员工作的时间空间内),是的,但这实际上取决于对编程语言和数学的熟悉程度,而不是这样做的可能性。例如,我假设可以实现一个lambda演算解释器,我将引导您使用[

如果您要阅读一个问题语句,例如在TopCoder上找到的内容,并将其转换为lambda演算表示,将其“转换”为Haskell或Lisp代码是一个简单的练习吗


换句话说,一个问题能用lambda演算形式系统解决,然后用函数式编程语言实现吗?

这是一个困难的问题。理论上,是的。实际上,有点像。一般来说,我会说定义的可计算函数可以有效地实现(在程序员工作的时间空间内),是的,但这实际上取决于对编程语言和数学的熟悉程度,而不是这样做的可能性。例如,我假设可以实现一个lambda演算解释器,我将引导您使用['Visual Automata Simulator]”,以获取包含在平凡化包装中的图灵模型的示例。

Haskell的语法与lambda演算非常相似。您的问题是Haskell的类型检查器不会接受非类型lambda演算中的某些术语


出于好奇,到底是谁用lambda演算解决了TopCoder?这听起来非常不平凡。o_o

我相信(但不能/不会证明)将任何用简单类型的lambda演算编写的程序翻译成Haskell是很简单的(有些函数可以用非类型的lambda演算编写,但不能用Haskell编写)。格拉斯哥·哈斯凯尔·德苏加(Glasgow Haskell desugars)到SystemF——粗略地说,SystemF是简单类型lambda演算的一个更强大的版本——因此哈斯凯尔已经“包括”了STLC。你的翻译只需要转换成Haskell的一小部分,这是不加修饰的——结果自然会非常冗长,而且不地道。@Stephentelley:事实上,没有什么可以证明的。翻译非常简单,
λx:τ。M
被转换为
\(x::τ)->M
,函数应用程序
mn
保持不变。问题出现在非类型化的lambda演算上,因为如果不滚动/展开无限类型(非常好的例子是
Y
combinator),“我想可以实现lambda演算解释器”-是的,非常容易。非类型化lambda演算是一系列日益复杂的语言中的第一种,这些语言以类型和编程语言的形式出现。实现在OCaml中:这本书的导言:“类型系统是在程序中强制实现抽象级别的语法方法。”失败!所以从这个意义上讲,Lisp可能更容易翻译,因为它也是非类型化的?我在睡眠中有高级(无意识)思维。我的猫在凌晨3点叫醒了我,这就是我意识中流血的原因。我在脑海中听到了这个问题,并开始考虑使用lambda演算作为问题的中间表示。我之所以这样做,是因为它可以将冗长的问题语句转换成纯粹的符号。理想情况下,这样做的结果将是一个简单的、条理清晰的计算问题,而不是一个高层次的描述。本质上,目的是将一个“真实世界”系统简化为一个数学/计算系统。
(λnmfx.n(mf)x)(λfx.f(fx))(λfx.f(fx))
是一个非常非常冗长的说法
2+2
;-)