对所有了解lambda演算的人:关于编程,它为您带来了什么好处?您会建议人们学习它吗?
Answers:
如果要使用任何功能性编程语言进行编程,这是必不可少的。我的意思是,了解图灵机有什么用?好吧,如果您编写C,则语言范例非常接近Turing机器-您有一条指令指针和一条当前指令,并且该机器在当前状态下执行某些操作,然后继续执行下一条指令。
在功能语言中,您根本不能那样想-这不是语言范式。您必须回想lambda演算,以及在那里如何对术语求值。如果您不知道lambda演算,那么要使用一种函数式语言有效将变得更加困难。
lambda演算的好处是它是一个非常简单的计算模型,等效于Turing机。但是,虽然图灵机更像是汇编语言,但lambda演算却更像是一种高级语言。而且,如果您学习Church编码,这将有助于您学习称为延续传递样式的编程技术,这对于实施回溯搜索和其他巧妙技巧非常有用。
lambda演算在实践中的主要用途是它是研究新的编程语言思想的出色实验室工具。如果您对新的语言功能有个想法,可以将新功能添加到lambda演算中,这样一来,您不仅可以进行编程,而且可以进行简单而全面的学习,从而获得足够的表现力。对于语言设计者和理论家而言,这种使用确实比程序员更多。
Lambda微积分本身也非常酷:就像了解汇编语言一样,它将加深您对计算的理解。在lambda演算中编写通用图灵机非常有趣。但这是基础数学,而不是实际编程。
老实说,在函数式编程之前学习lambda演算使我认识到两者与C与任何命令式编程都一样无关。
Lambda演算是一种函数式编程语言,一种深奥的语言,如果您愿意,可以使用Turing tarpit。偶然地它也是第一个。
绝大多数函数式编程语言根本不需要您“学习” lambda演算,这意味着lambda演算极少,您可以在不到一个小时的时间内“学习”其公理。要知道从中得到的结果,就像定点定理一样,Church-Rosser定理等也与函数式编程无关。
同样,lambda抽象通常被认为是“函数”,我不同意,它们是算法,而不是函数,这是一个微小的区别,大多数“函数语言”都以经典数学的方式来对待函数。
但是,例如要有效地使用Haskell,您确实需要了解某些类型的系统,而与lambda演算无关,System F类型的系统可以应用于所有“函数”,并且根本不需要lambda抽象。在数学中,通常我们说f:R ^ 2-> R:f(x)= x ^ 2。我们可以说:f(x)= x ^ 2 :: R-> R->R。实际上,Haskell非常接近此表示法。
Lambda演算是理论上的形式主义,Haskell的函数实际上不比f更像是“ lambda抽象”:f(x)= x ^ 2实际上,使lambda抽象有趣的是,它使我们能够定义通常被视为“常数”的东西作为“函数”,由于巨大的计算开销,没有函数语言可以做到这一点。Haskell等只是System F类型系统的一种受限形式,适用于日常经典数学中使用的函数。Haskell中的函数肯定不是lambda微积分中的匿名形式化符号化申请者。大多数功能性编程语言都不是基于符号约简的重写系统。Lips在某种程度上是一个范例,但它本身就是一个范例,它的“ lambda关键字”确实没有。
如果您只想成为一名技术人员并编写程序来做事情,那么您实际上就不需要了解lambda演算,有限状态机,下推自动机,正则表达式,无上下文语法,离散数学等。
但是,如果您对这些内容的更深层次的奥秘抱有好奇心,您可能会开始想知道如何回答这些问题。这些概念很漂亮,将扩大您的想象力。我也认为,顺便说一句,他们使一个更好的实践者。
让我着迷的是明斯基的书《计算:有限和无限的机器》。
一种学习lambda演算的可能方法是
http://en.wikipedia.org/wiki/Lambda_Calculus
或者,如果您想要更多,这是我的博客,专门讨论lambda微积分和类似的东西
http://weblogs.manas.com.ar/lziliani/
作为计算的每一个抽象,使用lambda演算,您可以对大多数编程语言中使用的内容进行建模,例如子类型化。有关此内容的更多信息,从这种意义上讲,这是一本有关Lambda微积分实际应用的最佳书籍之一