是什么让lambda演算与研究相关?


10

我将于明年秋天开始一个本科计算机科学课程,但是我不能真正理解函数式编程中的λ微积分。我可能会完全误解这一点,但是根据斯坦福哲学百科全书中的定义,它只是功能的另一种表示法。

如果仅仅这样,为什么在常规函数符号上使用λ微积分来计算算法运行时间有什么好处?


5
它不是“只是功能的另一种表示法”,而是“功能的第一种表示法”。
Andrej Bauer

感谢您的建议,@ Kaveh。对于以后的帖子,我会牢记在心,但是mhelvens的回答非常好,因此不需要交叉点。

它是对象的正式定义。我看不出您的确切问题是什么。
拉斐尔

在我了解lambda演算之前,我并不真正理解术语或为什么要在函数式编程中完成事情。它使软件结构看起来没有那么随意。
dansalmo 2013年

Answers:


13

在计算机科学中,我们希望以严格的数学分析和理解源代码。这是绝对确定证明有趣的属性(例如终止)的唯一方法。为此,我们需要一种对每种结构都具有定义明确的含义的语言。

从理论上讲,这可以是任何具有良好形式语义的语言。但是,为了使事情变得不那么复杂且不容易出错,最好使用一种尽可能简单但仍然能够表达任何程序的语言(即Turing complete)。为了推理命令性代码,有图灵机。但是出于函数编程的原因,存在 -calculus。λ

基本的 -calculus就像一种函数式编程语言,但是带有很多“包bag”。这不是用来实际编写程序的好语言,也不是有效的语言。只是它简单而富有表现力。例如,我们不需要循环,因为我们可以使用递归来模拟它们。而且我们不需要具有多个参数的函数,因为我们可以使用Currying对其进行仿真。λ

现在,您可能需要证明不属于基本(未类型化) -calculus的构造的属性。这就是多年来计算机科学家将其扩展到不同方向的原因。例如,由于类型系统的原因,类型 -calculi有很多变体。λλλ


3
imo,一些计算机科学可能是关于理解源代码的,但是说那通常是正确的,就像说物理学是关于用数学上的严谨来理解火箭一样。计算机科学是关于计算的。一个相关的抱怨是,如果您想学习效率而不是格式正确的源代码,那么语言的效率确实很重要。从这个意义上讲,最好将TM视为一种思考效率的方法,而不是一种命令式语言的模型(出于这两个目的,单词RAM可能是更好的选择)
Sasho Nikolov

顺便说一句我上面写的也并不意味着我不喜欢你的答案:)
Sasho尼科洛夫

同意 ;-)固定。
mhelvens

1
图灵机对命令式代码的推理很残酷,使用玩具语言(如简单的while键入语言)要容易得多。stackoverflow.com/questions/507310/the-while-language。图灵机对于了解复杂性理论仍然非常有用。
科迪2013年

1

奇怪的是,很多书都在谈论演算,而没有提到LispScheme,基于它的现代编程语言,不幸的是,使学生们想到了它古老而又抽象的思想,并且大多是理论性的。学习Lisp或Scheme可以极大地帮助理解演算。λλλ

如果仅仅这样,为什么在常规函数符号上使用λ微积分来计算算法运行时间有什么好处?

使用Lisp或函数式编程有很多优点,并且计算算法的运行时间只是一种可能(尽管如果您为此引用一个引用会很有帮助)。由于其功能注释已经存在,有时通过归纳或递归关系确定运行时的公式可能与原始代码有更强或更明显的关系。还简化了该算法的其他类型的分析。

另一个主要优点是语法简单。其他语言的解析器非常复杂,但是Lisp解析器非常简单。因此Lisp是研究解析理论的一种很棒的语言。

另一个关键方面是从逻辑数学的角度/角度而不是从“计算机科学”的角度分析软件。

正如其他答案所指出的那样,Lisp完全是关于递归而不是迭代,而递归是CS的核心。

有关[ -view]和详细信息的更多建议,请参见[1],这是免费的在线和半著名参考。λ

[1] 计算机程序的结构和解释,作者:Abelson&Sussman

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.