函数编程之外的Lambda演算?


21

我是一名大学生,我们目前正在研究Lambda微积分。但是,我仍然很难理解为什么这对我有用。我意识到,如果您进行大量的函数编程,它可能会很有用,但是我认为学习函数式编程并不需要它,您认为呢?

其次,Lambda微积分在计算机科学领域内但在函数式编程语言之外是否有用?

Answers:


15

Lambda演算是逻辑,类别理论,类型理论,形式验证等基础知识。基本上,与编程语言语义和形式逻辑有关。如此基本的形式主义使在这些领域工作的人们甚至不质疑它的好处。

我认为它对于理解函数式编程非常有用,因为它为您提供了函数式编程的本质。功能,应用,替代。在此基础上,您可以建立有关功能程序及其转换的推理能力。高阶函数轻而易举。

当然,如果没有lambda演算,就可以学习函数式编程,但是如果没有lambda演算,就永远无法真正理解函数式编程。


非常感谢您的回复戴夫。我认为正式验证是最好的理由,关于lambda演算为何对我学习有用,而且很有趣的是,我将在下学期开设一门正式验证课程。您还会使用lambda演算对用任何语言(例如命令式或面向对象的一种)编写的软件进行形式验证吗?
Jacob

1
在进行形式验证时,您可能不能直接使用lambda演算,但是它将出现在形式验证的基础上。编写规范通常涉及用功能语言编写,甚至用于命令式/ OO代码。
戴夫·克拉克2012年

好的,非常感谢,现在我有更多的理由要研究这个。您是否知道lambda演算是否用于设计任何非功能性语言(处于较低级别)?
2012年

1
阿尔戈尔。斯卡拉(Scala)。最终,您的问题很难回答。lambda演算已成为(大多数)语言设计师的常识的一部分,因此即使未明确使用它,它也会影响语言设计。考虑Smalltalk或Ruby中的块,Java中的匿名类。这些是闭包,与lambda演算中的高阶函数紧密联系。
戴夫·克拉克2012年

好的,非常感谢Dave,非常感谢。
Jacob

17

您正在寻求计算机科学和逻辑之外的应用程序。这很容易找到,例如在代数拓扑中,具有笛卡尔封闭的空间类别很方便,请参见nLab 上拓扑空间的便利类别。与笛卡尔封闭类别相对应的形式语言恰好是 -calculus。让我用一个非常简单的示例说明如何使用它。λ

首先,作为热身练习,假设有人问您是否由定义的函数是可区分的。您实际上不必证明它是,只需观察它是可微函数的组成,因此是可微的。换句话说,您根据定义的形式得出了简单的结论。 f x = x 2 e x + log 1 + x 2f:RRf(x)=x2ex+log(1+x2)

现在来看真实的例子。假设有人问您是否由定义 的函数 是连续的。可以立即回答“是”,因为该函数是使用 -calculus 定义的,并且是从连续映射,,等开始定义的。f:RRλ 最大

f(x)=(λf:C(R).xxf(1+t2)dt)(λy:R.max(x,sin(y+3))
λmaxsin

-calculus的各种扩展使得在其他领域中可以做同样的事情。例如,由于平滑的topos是笛卡尔封闭类别,因此使用 -calculus 定义的任何地图(从导数和实数的环结构开始)都可以自动生成(并且您可以根据需要添加指数函数)光滑。(实际上,平滑顶点的主要推力是存在幂零无穷小,这些无穷无穷小使您可以有意义地说出诸如“我们将光盘分成无限细的等腰三角形”之类的东西。)λλλ


1
谢谢您的精心答复。实际上,我试图在计算机科学中找到lambda演算的用途,但在函数式编程之外,如果不清楚,我们深表歉意。我更改了问题以更清楚地说明这一点。
Jacob

啊,太糟糕了,我会对此做一个详尽的回应。
安德烈·鲍尔

对此表示歉意。如果您想添加任何其他信息,请随时添加任何评论:)
Jacob

2
我认为戴夫的问题很好,我无话可说。如果您想了解使用 -calculus 可以做什么令人兴奋的事情,也许您可​​以看一下不可能的功能。但作为一个普遍的答案,戴夫的非常好。λ
Andrej Bauer 2012年

7

看 -calculus的一种方法是作为简单而简洁的参数化程序模型。您几乎可以使用任何具有功能,过程或方法的编程语言,以及具有模块或使您能够对类型进行参数化的任何语言来对代码进行参数化。参数化是重用的一种形式。因为 -calculus非常简单,所以可以使您对代码进行参数化的许多编程语言之间的共性尤其明显。λλλ

可能不知道 -calculus 就能成为一个非常优秀的程序员,但是您会错过一些非常有用的漂亮东西。λ


5

Microsoft LINQ(语言集成查询)将功能编程功能移植到过程语言中。它广泛且直接地使用 -calculus来解开依赖关系并隔离可委托给数据库服务器的表达式树的各个部分。这是一种非常实用的应用,具有很高的商业价值。λ

我已经使用一种功能语言编写了一个小型商业应用程序,并且可以向您保证,尽管对学者和研究人员来说非常值得,但它们在商业上不如程序表亲有用。确实,这是课程中所涉及的马匹问题,最实用的是一种可以根据需要在过程或功能上使用的语言。结果,为支持LINQ而引入(为C#提供)的功能(例如 -expressions )在数据库查询的上下文之外得到了很多使用。λ

因此,当您最终发现自己想要支付报酬而不得不做恶事时,即使您几乎肯定不会使用功能语言,也可能会发现 -calculus比您预期的要有用。λ


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.