lambda演算与编程语言之间是什么关系?[关闭]


13

我明年要开始(大学)计算机科学专业的第一年,而我主要用C语言写作(如果有关系的话)。我曾尝试搜索,但发现的大部分内容都是关于lambda演算的知识。为什么lambda演算在编程中比单变量演算有用得多?lambda表达式与功能程序之间是否存在关系?阿隆佐·丘奇(Alonzo Church)在lambda微积分上的工作是否影响了编程语言的发展?

校外的每个人都在忙着讨论它,即使我渴望学习它,并看到它与我的编程和对编程语言的理解直接相关,我也不知道他们会谈论什么。


2
可以在cs.stackexchange.com上更好地回答此问题。
davidk01 2014年

@ChrisF。也许这个问题更适合其中一个计算机科学站点。如果没有,我试图缩小它的范围,想知道是否可以以当前形式重新打开它。
汤Tom(Tom Au)

Mathematica注意到了lambda演算,没有人提及。
威廉

Answers:


26

Lambda演算有趣,优雅,并且使理解函数式编程语言更加容易。但是,您不会在典型的CS学士课程中遇到LC,因此您现在不必学习它-我建议您在重新访问Lambda微积分之前先尝试使用功能语言。我相信OCaml是C语言程序员进行函数式编程的一个很好的起点,而Scheme是进入Lambda微积分的一个很好的起点。

Lambda微积分与微积分(应称为分析)无关。通常,演算是一个“形式系统”,即一组做某事的规则。微分演算提供有关值更改的规则,而Lambda演算的规则描述计算本身。从这套非常基本的规则中,我们可以构建任意计算,数据表示形式(例如布尔值,整数或列表),甚至控制流程构造(例如条件或循环)。LC等效于图灵机,但是两种型号都有不同的优势。

Lambda微积分对编程语言产生了巨大影响。要实现的第二种高级语言是Lisp,可以理解为将LC直接编码为编程语言。这种“函数式编程”对编程语言的发展具有巨大影响。诸如匿名函数,函数指针,闭包(嵌套函数),垃圾回收,变量作用域,元编程,类型系统的进步,类型推断,解释语言,动态类型语言,面向对象编程等功能都归功于大部分到编程语言的功能编程分支。有人开玩笑说,任何新的(非学术的)编程语言都只会添加Lisp几十年来已经拥有的功能。

除此之外,Lambda微积分和其他相关计算是编程语言理论和某些编译器构造技术中必不可少的工具。

任何具有匿名功能(充当闭包并且可以自由传递)的语言都将立即包含lambda演算的编码。匿名函数对应于lambda表达式,但LC函数中始终始终只有一个自变量。但是,任何图灵完备的语言都等同于LC,因此LC始终可以在此类语言之上实现。这往往发生在规则匹配系统或过分智能的配置格式中,从而引起“格林斯潘的第十条规则”(开玩笑–主要是):“ 任何足够复杂的C或Fortran程序都包含一个临时的,非正式指定的,bug多的bug ,缓慢执行Common Lisp的一半。


这个答案比我之前选择的答案更好。您的答案确实很成功。这正是我想要的!
RonaldMunodawafa 2014年

“ ...,但在LC函数中始终只有一个自变量”:该功能称为currying还是至少与之相关?
Giorgio 2014年

@Giorgio Currying是不同的,但是相关。LC没有多参数函数,但是可以将它们简单地编码为每个都带有一个参数的嵌套函数。使用ML表示法的示例:x = fn (a, b, c) => a + b + c(type int * int * int -> int,invocation fn (1, 2, 3))可以转换为x = fn a => fn b => fn c => a + b + c(type int -> int -> int -> int,invocation ((x 1) 2) 3– ML中的可选部分)。现在,除了提供所有三个参数外,我们还只能提供两个:plus3 = x 1 2type int -> int。这是部分应用程序/循环。
阿蒙2014年

我认为currying意味着让所有函数仅接受一个参数(如LC中一样)。
Giorgio

8

Lambda演算与微分/积分演算无关。在这个词的最一般意义上,微积分只是意味着一种计算系统。

在非常高的层次上,lambda演算是一种计算模型,就像图灵机是一种计算模型一样。编程语言研究人员之所以研究lambda演算,是因为它作为模型与诸如逻辑和范畴论之类的数学形式方法有着密切的联系。因此,这些领域的方法可用于研究lambda演算的各个方面和扩展,进而有助于设计具有某些属性的更好的编程语言。

lambda演算在编程语言中最直接的影响通常以一流函数和闭包的形式出现。C不支持闭包,因此您需要使用更高级的语言(例如Lisp,Python,Ruby,JavaScript等)来探索该概念。从历史上看,Lisp被认为是lambda演算作为一种编程语言的第一个具体实现。 。


1
您可能要提到与lambda演算非常接近的特定语言,例如Lisp。
Giorgio

1
我仍在使用SICP学习Scheme,希望我能学到更多有关该领域的知识。感谢您的详尽回答和建议。
RonaldMunodawafa 2014年
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.