什么是学习 Lambdas/Closures 的最佳语言独立来源?

7

2
要深入了解JavaScript中的闭包,请阅读:http://www.jibbering.com/faq/faq_notes/closures.html - outis
5个回答

8

如果你只是想了解一些简单易懂的内容,可以阅读《Lambda演算和Scheme入门》。当然,这并非与语言无关,但Scheme的实现相当接近。

如果想深入了解,请阅读《类型和编程语言》 - Benjamin Pierce。该书涵盖了对Lambda演算进行彻底研究的编程语言理论。完全与具体编程语言无关。


4

3

Lambda Calculus是与语言无关的。答案取决于您所指的“基础知识”的含义。一旦选择任何语言,您就失去了语言无关的要求。

Javascript有闭包。我会把它加到列表中。而Java没有-但还未来得及添加。

我认为这归结于您最终打算在哪里使用它们。如果想要老派的话,回到Lisp或Scheme,因为它们是源头。如果将来要在主流商业语言中使用它们,请选择Javascript、C#或Python。


@dyffymo:添加 JavaScript 闭包链接,链接可行吗?+1 - Kb.
Java 可能没有 lambda 函数,但它确实有闭包。当您匿名实现一个接口时,定义的方法可以访问外部变量,只需确保将它们标记为 final。 - Ruan Mendes
匿名内部函数并不等同于具有内置闭包。您无法传递该内部函数并使其外部上下文仍然可用。 - duffymo

2

对于想要学习理论基础的初学者,danben推荐的Pierce的书是无与伦比的。

但从你提供的列表来看,听起来你想要的是如何有效地使用一级函数值进行编程,这就是lambda所评估的内容。你不会在一个与语言无关的程序包中得到这种经验、信息或直觉。更糟糕的是,在实际语言中,许多匿名函数是通过Curried函数的部分应用而创建的,而不是通过显式的lambda;大多数经常使用一级函数的人发现lambdas相当令人讨厌和难以阅读。

在此背景下,以下是两个建议:

  • 如果你坚定地想学习lambda,那就做点Scheme的东西。Schemers喜欢一级函数,Scheme的符号强制程序员使用比许多其他函数语言更明确的lambda。

  • 作为一个初学者,你可能更好地了解为什么人们想要使用这些一级函数。在这种情况下,阅读John Hughes的Why Functional Programming Matters。Hughes的论文使用的符号是有些与语言无关的;它不是任何当前流行语言的符号,但它与Caml、F#、Haskell和ML有些相似。


1

我不建议先从“与编程语言无关”的角度去学习它们。相反,我建议先在JavaScript中使用它们进行实践学习,然后扩展到其他语言(如Lisp、C#)。然后,如果你感觉有必要进一步深入学习理论知识。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接