大多数编程语言都使用lambda/closures。
哪个与语言无关的来源被推荐作为学习Lambda基础知识的最佳选择?
不同语言中的Lambdas/Closures:
大多数编程语言都使用lambda/closures。
哪个与语言无关的来源被推荐作为学习Lambda基础知识的最佳选择?
不同语言中的Lambdas/Closures:
如果你只是想了解一些简单易懂的内容,可以阅读《Lambda演算和Scheme入门》。当然,这并非与语言无关,但Scheme的实现相当接近。
如果想深入了解,请阅读《类型和编程语言》 - Benjamin Pierce。该书涵盖了对Lambda演算进行彻底研究的编程语言理论。完全与具体编程语言无关。
我认为Lambda在Lisp中是最简单的,因为它就是为这种事情而设计的,而在方言中,Scheme往往是最简单的。
不巧的是,有史以来最伟大的计算机科学书籍 使用Scheme!这里是SICP关于Lambda的介绍。
Lambda Calculus是与语言无关的。答案取决于您所指的“基础知识”的含义。一旦选择任何语言,您就失去了语言无关的要求。
Javascript有闭包。我会把它加到列表中。而Java没有-但还未来得及添加。
我认为这归结于您最终打算在哪里使用它们。如果想要老派的话,回到Lisp或Scheme,因为它们是源头。如果将来要在主流商业语言中使用它们,请选择Javascript、C#或Python。
对于想要学习理论基础的初学者,danben推荐的Pierce的书是无与伦比的。
但从你提供的列表来看,听起来你想要的是如何有效地使用一级函数值进行编程,这就是lambda
所评估的内容。你不会在一个与语言无关的程序包中得到这种经验、信息或直觉。更糟糕的是,在实际语言中,许多匿名函数是通过Curried函数的部分应用而创建的,而不是通过显式的lambda
;大多数经常使用一级函数的人发现lambdas相当令人讨厌和难以阅读。
在此背景下,以下是两个建议:
如果你坚定地想学习lambda
,那就做点Scheme的东西。Schemers喜欢一级函数,Scheme的符号强制程序员使用比许多其他函数语言更明确的lambda。
作为一个初学者,你可能更好地了解为什么人们想要使用这些一级函数。在这种情况下,阅读John Hughes的Why Functional Programming Matters。Hughes的论文使用的符号是有些与语言无关的;它不是任何当前流行语言的符号,但它与Caml、F#、Haskell和ML有些相似。
我不建议先从“与编程语言无关”的角度去学习它们。相反,我建议先在JavaScript中使用它们进行实践学习,然后扩展到其他语言(如Lisp、C#)。然后,如果你感觉有必要进一步深入学习理论知识。