我只是想知道在哪里可以找到一些语言无关的教程,了解lambda函数是什么,它们的用途是什么,以及不支持它们的语言中的粗略等价物。
我特别喜欢有关常用符号的任何信息。
谢谢!如果我能详细说明,请告诉我。
编辑:哦,嘿,我忘记了什么。就术语而言,lambda表达式或函数,匿名/委托函数和闭包之间有什么区别?
答案 0 :(得分:5)
要求与语言无关的治疗是非常严格的限制。我可以推荐几个关于lambda演算的教程:
A tutorial by R. Rojas专注于快速达到使用lambda演算编程的程度。
tutorial by Prakash Panangden进入技术深度,最后展示了如何使用定点组合器模拟递归。
如果你想了解在编程中使用lambda和高阶函数,我认为你最好放弃你的不可知论。 ML / Hope / Miranda / Haskell语言系列的一篇好文章是
答案 1 :(得分:5)
就术语而言,lambda表达式或函数,匿名/委托函数和闭包之间有什么区别?
关于术语:
lambda表达式是编写Alonzo Church为lambda演算发明的匿名函数的原始方式。在lambda演算中,所有函数都是纯粹的:没有任何副作用。
麦卡锡对LISP采用lambda表达式为(lambda (arguments ...) body)
,拼写为“lambda”。苏斯曼和斯蒂尔后来使语义更忠实于教会的原创。表达式也被Haskell采用为\ arguments ... -> body
,而反斜杠意图看起来像fn args => body
。所有这些表达式都被正确地称为lambda表达式,并且都表示匿名函数。只有在Haskell中,函数才是纯粹的; Lisp,ML和Scheme都允许body
产生副作用。
当您评估 lambda表达式或其他类型的嵌套函数时,您将获得闭包。闭包不仅包含lambda表达式的编译代码,还包含有关自由变量的信息。 (在Lisp和Scheme中,闭包存储自由变量的位置;在Haskell和ML中,闭包存储自由变量的值。)
匿名函数是一个更通用的概念,不需要局限于简单的绑定和正文。例如,在Smalltalk中,“block”表示匿名函数,但块的主体是一系列语句,因此它与lambda表达式绝对不同。
我担心“委托功能”无法帮助你。在我的世界里,这个词用来完全描述其他东西。
答案 2 :(得分:3)
你可能不想被提到Alonzo Church的lambda演算。
到目前为止,lambda函数最常用的符号是LISP。
Abelson& Sussman“计算机程序的结构和解释”可能是涵盖该主题的最易访问的文本,以及应用程序。
如果你想知道它的起点,请挖出麦卡锡的"Recursive Functions of Symbolic Expressions and Their Computation By Machine, Part I"。
答案 3 :(得分:1)
学习Lisp的方言(Scheme目前非常受欢迎)。事实上,我不赞成约翰的建议,阅读“计算机程序的结构和解释”,并沿途学习Lisp。
Lisp最初并不是一种编程语言,而是一种描述计算的数学符号。它被设计为比图灵机更好地教学生(如果你曾经在图灵机上工作,你就会知道它们吸吮了多少)。 Lisp代码可以编译和执行的事实是一个意外。 Lisp非常接近lambda演算(这是一个不同的数学分支)这一事实也是一个意外(事实证明,只有在语言设计之后很久才证明)。
Lisp的大部分功能并没有真正“设计”到语言中,与其他语言复制Lisp的方式不同。它们出自Lisp基于的几个简单规则 - 就像数学中的定理出现在数字规则所基于的那样。
答案 4 :(得分:1)
如果没有碰到相关的SKI combinator calculus,你就不会对Lambda演算有太多的了解,所以你不妨将你的脚趾浸入其中并将其完成。令人愉快和奇怪的To Disect a Mockingbird,如果不是最好的起点,可能是最奇怪的。你的大脑会感觉被外星人重新布线。真。
一些疯狂的人为SKI计算实施了一种语言。这是一个打印斐波那契数字的Unlambda程序:
```s``s``sii`ki
`k.*``s``s`ks
``s`k`s`ks``s``s`ks``s`k`s`kr``s`k`sikk
`k``s`ksk
嘿,不要怪我。我没有发明它。
当事件显示Perl regular expression in a loop could implement the SKI calculus时,事情变得更加奇怪,因此,循环中的Perl正则表达式是图灵完成。
答案 5 :(得分:0)
你看过Wikipedia page on Lambda calculus了吗?它在数学理论上更重,但一旦你点击first class functions,最终会遇到更实际的问题。