知道lambda演算有多大帮助?

时间:2020-03-06 14:32:15  来源:igfitidea点击:

对所有了解lambda演算的人:在编程方面,它给我们带来了什么好处?我们会建议人们学习它吗?

解决方案

对我来说,好处是更紧凑的协同编程。东西倾向于水平流动比垂直流动更多。另外,它对于原型简单算法非常有用。不知道我是否正在充分利用它,但我发现它非常有用。

lambda演算是一个计算模型,就像图灵机一样。因此,如果我们需要基于此模型为某种语言实现某种求值器,则很有用,但是在实践中,我们只需要基本思想(嗯,将参数在语义上正确放在函数体中?),这就是它。

如果要使用任何功能性编程语言进行编程,这是必不可少的。我的意思是,了解图灵机有什么用?好吧,如果我们编写C,则语言范例非常接近Turing机器-我们具有一条指令指针和一条当前指令,并且机器在当前状态下执行某些操作,然后继续执行下一条指令。

在功能语言中,我们根本不能那样想-那不是语言范式。我们必须回想lambda演算,以及在那里如何对术语求值。如果我们不知道lambda演算,那么要使用一种函数式语言有效将变得更加困难。

一种学习lambda演算的可能方法是

http://en.wikipedia.org/wiki/Lambda_Calculus

或者,如果我们想要更多,这是我的博客,专门讨论lambda微积分和类似的东西

http://weblogs.manas.com.ar/lziliani/

作为计算的每一个抽象,使用lambda演算,我们可以对大多数编程语言中使用的内容进行建模,例如子类型化。有关此内容的更多信息,从这种意义上讲,有关lambda演算的实际用途的最佳书籍之一是

http://www.amazon.com/Types-Programming-Languages-Benjamin-Pierce/dp/0262162091/ref=sr_1_1?ie=UTF8&s=books&qid=1222088714&sr=8-1

我认为在实践中将lambda演算用于编程是因为它是一个非常小的系统,可以捕获抽象的本质(或者,如果愿意的话,可以使用"匿名函数"或者闭包)。除此之外,除了我们需要自己实现抽象(如Tetha(114646)所述)外,我认为它通常不是必需的。

我也完全不同意Denis Bueno(114701)的观点,他说这对函数式编程至关重要。完全无需任何lambda演算就可以很好地定义,使用或者理解功能语言。为了理解功能语言中术语的评估(我认为这与功能语言的使用有些矛盾),我们很可能会更好地学习术语重写系统。

我同意那些说理论上无需学习lambda演算就可以学习函数式编程的人,但是不学习lambda演算有什么好处呢?似乎并不需要花费大量时间。

最有可能的是,它将更好地理解函数式编程。但是,即使不是这样,它仍然是一件很值得学习的很酷的事情。 Y组合器是一件很美的事情。

我还要提及的是,如果我们正在NLP领域做任何事情,那么lambda演算是组成语义上大量工作的基础。

lambda演算的好处是它是一个非常简单的计算模型,等效于Turing机。但是,虽然图灵机更像是汇编语言,但lambda演算却更像是一种高级语言。而且,如果我们学习Church编码,这将有助于我们学习称为延续传递样式的编程技术,这对于实现回溯搜索和其他巧妙技巧非常有用。

lambda演算在实践中的主要用途是它是研究新的编程语言思想的绝佳实验室工具。如果我们有新语言功能的想法,可以将新功能添加到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微积分中的匿名形式化符号化申请者。大多数功能性编程语言都不是基于符号约简的重写系统。 Lisps在某种程度上是一个范例,但它本身就是一个范例,其" lambda关键字"确实不满足于称其为lambda演算。