知道lambda微积分有多大帮助?
对于所有了解lambda微积分的人来说:它给你带来了什么好处,关于编程? 你会build议人们学习吗?
如果你想用任何函数式编程语言进行编程 ,这是至关重要的。 我的意思是,了解图灵机有多有用? 那么,如果你编写C语言,那么语言范例就非常接近图灵机 – 你有一个指令指针和一个当前指令,机器在当前状态下进行一些操作,然后继续下一条指令。
在function语言中,你根本就不会那么想 – 这不是语言范式。 你必须回想一下lambda微积分,以及如何评估条件。 如果你不懂lambda微积分,那么在函数式语言中使用它将会困难得多。
lambda微积分的好处在于它是一个非常简单的计算模型,相当于一个图灵机。 但是,图灵机更像汇编语言,lambda演算更像是一种高级语言。 而且如果你学习的教会编码 ,将帮助你学习编程技术称为延续传球风格 ,这是非常有用的执行回溯search和其他巧妙的技巧。
lambda演算在实践中的主要用途是它是研究新的编程语言思想的一个很好的实验工具 。 如果你有一个新的语言function的想法,你可以添加新function的lambda演算 ,你得到的东西是足够的expression足够的程序,而很简单,足够深入的学习 。 这种用法对于语言devise者和理论家来说,更多的是程序员。
Lambda微积分本身也非常酷:就像了解汇编语言一样,它会加深对计算的理解 。 在lambda演算中编程一个通用的图灵机是特别有趣的。 但这是基础math,不是实际的编程。
说实话,在函数式编程之前学习lambda微积分让我意识到,这两个和C是无关紧要的编程。
Lambda微积分是一种函数式编程语言,如果你喜欢的话,它是一种深奥的graphics语言; 不小心它也是第一个。
大多数函数式编程语言根本不需要你“学习”lambda微积分,无论这意味着lambda微积分是非常微小的,你可以在一个小时内“学习”它的公理。 为了了解它的结果,就像不动点定理一样,教会 – 罗瑟定理等等与function规划无关。
另外,lambda抽象常常被认为是“function”,我不同意这一点,它们是algorithm,而不是函数,是一个微小的差别,大多数“函数式语言”更像古典math一样对待它们的function。
但是,为了有效地使用Haskell,你需要理解某些types系统 ,这与lambda微积分无关,System Ftypes系统可以应用于所有的“函数”,并且完全不需要lambda抽象。 通常在math中,我们说f:R ^ 2 – > R:f(x)= x ^ 2。 我们可以说:f(x)= x ^ 2 :: R – > R – > R.实际上,Haskell和这个符号非常接近。
Lambda演算是一种理论上的forms主义,Haskell的函数实际上没有比f:f(x)= x ^ 2更多的“lambda抽象”,使得lambda抽象更有趣的是它使我们能够定义通常被看作“常量”作为“function”,由于巨大的计算开销,没有function语言。 Haskell和类似的只是系统F的types系统的一个限制forms,用于日常的经典math中。 Haskell中的函数当然不是匿名的正式象征性的归约申请人,因为他们在lambda演算中。 大多数函数式编程语言不是基于简化的重写系统。 Lisp在一定程度上是一个范式,但是它的lambda关键字实际上并不能满足称之为lambda演算。
我认为在实践中使用lambda微积分关于编程是一个相当简单的系统,它抓住了抽象的本质(或者“匿名函数”或闭包,如果你愿意的话)。 除此之外,我不认为这通常是必要的,除非你需要自己实现抽象(如Tetha( 114646 )提到)。
我也完全不同意Denis Bueno( 114701 )的说法,这个function编程是必不可less的。 完全可以定义,使用或理解一个没有任何lambda演算的函数式语言。 为了理解函数式语言中的术语的评价(在我看来,这与function性语言的使用有点矛盾),你很可能会更好地学习术语重写系统。
我同意那些认为在不学习lambda演算的情况下学习函数式编程在理论上是可能的 – 但是不学习lambda演算的优点是什么? 这不是好像需要大量的时间投入。
最有可能的是,它会帮助你更好地理解函数式编程。 但是,即使没有,它仍然是一个值得学习的很酷的东西。 Y-combinator是美的东西。
如果你只想成为一名技术人员并且编写程序来做事情,那么你并不需要知道lambda演算,有限状态机,下推自动机,正则expression式,上下文无关语法,离散math等等。
但是,如果你对这些东西的深层奥秘有好奇心,你可以开始思考如何回答这些问题。 这些概念是美丽的,会扩大你的想象力。 顺便说一句,我也认为他们是一个更好的实践者。
Minsky的书Computation:Finite and Infinite Machines(有限与无限机器)是我所迷惑的。
学习lambda微积分的一个可行的方法是
http://en.wikipedia.org/wiki/Lambda_Calculus
或者,如果你想要更多,这里是我的博客致力于lambda微积分和类似的东西
http://weblogs.manas.com.ar/lziliani/
随着计算的每个抽象,使用lambda微积分,可以模拟大多数编程语言中使用的东西,如子types。 对于这个问题,在这个意义上说,lambda微积分的实际应用是最好的书籍之一
我发现Lambda演算对于理解函数式编程如何在更深层次上起作用是有用的。 特别是如何实现function语言。
它使我更容易理解types系统和评估策略等先进概念(例如按名称与按价值调用)。
我不认为需要了解有关Lambda演算的任何内容才能使用基本的函数式编程技术。 然而, 理解lambda演算使得学习高级编程理论变得更容易 。
lambda微积分是一个计算模型,就像图灵机一样。 因此,如果您需要为基于此模型的语言实现某个评估程序,这是非常有用的,但是在实践中,您只需要基本的想法(即将函数主体中的语义正确的参数)放在一起它。
我还想提一提的是,如果你在NLP领域做了什么,lambda演算就是大量构成语义工作的基础。
对我来说好处是更紧凑的协同编程。 东西往往水平stream动比垂直。 此外,对于简单algorithm的原型devise非常有用。 不知道我是否充分利用它,但是我觉得它非常有用。