对于所有了解 Lambda 微积分的人: 关于编程,它给你带来了什么好处?你会建议人们学习它吗?
对我来说,好处是更紧凑的协同编程。物质倾向于水平流动多于垂直流动。另外,它对于简单算法的原型开发非常有用。不知道我是否充分发挥了它的潜力,但我发现它非常有用。
Lambda 微积分是个计算模型就像图灵机一样。因此,如果你需要为基于这个模型的语言实现一个特定的求值器是有用的,但是在实践中,你只需要基本的思想(嗯。在函数体中放置语义正确的参数?)仅此而已。
如果你想在任何 函数式编程语言函数式编程语言编程,这是必不可少的。我是说,了解图灵机器有什么用?如果你写 C 语言的范式和图灵机非常接近你有一个指令指针和一条当前指令机器在当前状态下执行一些操作然后慢慢接近下一条指令。
在函数式语言中,您不能这样思考——这不是语言范式。你必须回想一下 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 Minio (114701)的观点,他认为函数式编程非常重要。定义、使用或理解函数式语言完全可以不用任何 lambda 演算。为了理解函数式语言中术语的求值(在我看来,这与函数式语言的使用有些矛盾) ,您很可能会更好地了解术语重写系统。
我同意那些说在理论上不学 lambda 微积分就可以学习函数式编程的人,但是 没有学 lambda 微积分有什么好处呢?这并不需要花费大量的时间。
最有可能的是,它将帮助您更好地理解函数式编程。但即使它不是,它仍然是一个值得学习的很酷的东西。Y 型组合机是一个美丽的东西。
我还想提一下,如果你在 NLP 领域做任何事情,lambda 演算是组合语义学中大量工作的基础。
Lambda 演算的好处在于它是一个非常简单的计算模型,与图灵机等价。虽然图灵机更像是汇编语言,但是 lambda 演算更像是一种高级语言。如果你学习 教堂编码,这将有助于你学习的编程技术称为 延续传递方式,这是非常有用的实现回溯搜索和其他巧妙的技巧。
Lambda 演算在实践中的主要应用是 它是研究新的编程语言思想的一个很好的实验室工具。如果你有一个新的语言功能的想法,你可以 将这个新特性加入到 lambda 微积分中和你得到的东西是 有足够的表现力来编程,而是 非常简单,可以非常彻底地研究。与程序员相比,语言设计者和理论家更多地使用这种方法。
Lambda 微积分本身也很酷: 就像会汇编语言一样,它也会 加深你对计算的理解。这是特别有趣的 设定一个通用图灵机在 lambda 微积分。但这是基础数学,不是实用编程。
如果你只想成为一个技术人员,写程序来做事情,那么你就不需要真正了解 lambda 微积分、有限状态机、下推自动机、正则表达式、上下文无关文法、离散数学等等。
但是如果你对这些东西背后更深层次的奥秘感到好奇,你就会开始想知道这些问题是如何得到解答的。这些概念是美丽的,并将扩大您的想象力。我还认为,顺便说一句,它们会让你成为一个更好的医生。
让我着迷的是明斯基的书《计算: 有限和无限的机器》。
老实说,在函数式编程之前学习 lambda 微积分让我意识到这两者之间的关系就像 C 语言与任何命令式编程之间的关系一样。
Lambda 微积分是 一函数式编程语言,一种深奥的语言,如果你喜欢的话,可以称之为图灵语言; 意外地,它也是第一种。
大多数函数式编程语言根本不需要你“学习”lambda 演算,不管这意味着什么,lambda 演算是极小的,你可以在一个小时内“学习”它的公理。为了了解它的结果,就像不动点定理一样,丘奇-罗塞定理等等与函数式编程无关。
此外,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: f (x) = x ^ 2更“ Lambda 抽象”,真正让 Lambda 抽象有趣的是,它使我们能够定义通常被看作“常量”的东西为“函数”,没有函数式语言能够做到这一点,因为庞大的计算开销。Haskell 和 like 只是系统 F 的 打字系统的一种限制形式,适用于日常经典数学中使用的函数。哈斯克尔的函数当然不是匿名的正式象征性裁员——申请者就像在 lambda 微积分中那样。大多数函数式编程语言都不是基于符号约简的重写系统。Lisps 在某种程度上是一种模式,但它本身就是一种模式,它的“ lambda 关键字”并不能满足称之为 lambda 微积分的要求。
我发现 Lambda 演算对于更深层次地理解函数式编程是如何工作的非常有用。特别是如何实现函数式语言。
它使我更容易理解类型系统和评估策略等高级概念(例如,按名称调用和按值调用)。
我不认为一个人需要知道任何关于 Lambda 演算来使用基本的函数式编程技术。