我在阅读《JavaScript权威指南》时,作者提到JavaScript是第一种推出的λ语言。
JavaScript的函数是一等公民,拥有(大部分)词法作用域。JavaScript是第一种主流的λ语言。从深层次上讲,JavaScript与Lisp和Scheme比与Java更相似。它是穿着C外衣的Lisp。这使得JavaScript成为了一种非常强大的语言。
我不明白什么是λ语言。这种语言的特性是什么,它与Java、C、C++和PHP等语言有何不同之处?
我在阅读《JavaScript权威指南》时,作者提到JavaScript是第一种推出的λ语言。
JavaScript的函数是一等公民,拥有(大部分)词法作用域。JavaScript是第一种主流的λ语言。从深层次上讲,JavaScript与Lisp和Scheme比与Java更相似。它是穿着C外衣的Lisp。这使得JavaScript成为了一种非常强大的语言。
我不明白什么是λ语言。这种语言的特性是什么,它与Java、C、C++和PHP等语言有何不同之处?
简单来说,一个 λ(lambda)语言是允许将函数作为参数传递给另一个函数,并且这个函数与其他变量一样处理的语言。此外,您应该能够定义这个要传递的函数为匿名的(或内联的)。PHP 5.3 添加了对 lambda 函数的支持。JavaScript 是第一个主流语言吗?在 JavaScript 之前,Lisp 在教育环境中被广泛使用,并用于自定义我们所钟爱的 Emacs http://www.gnu.org/software/emacs/manual/html_node/eintr/
下面是一个例子:
function applyOperation(a, b, operation) {
return operation(a,b);
}
function add(a,b) { return a+ b; }
function subtract(a,b) {return a - b;}
// Can be called like
applyOperation(1,2, add);
applyOperation(4,5, subtract);
// Anonymous inline function
applyOperation(4,7, function(a,b) {return a * b})
Java和C有何不同?在C中,您可以传递指向函数的指针,但无法匿名内联定义它。
在Java中(版本8之前),为了实现相同的效果,您必须传递实现接口的对象,该接口实际上可以匿名内联定义。
我曾经看到过lambda被定义为匿名函数和对函数的引用。Javascript支持这两种方式:
setTimeout(function(){ /* an anonymous function */ }, 100)
var f = function(){ /* function ref */ }
someGuiContainer(new WidgetInterface()
{
public void importantMethodToDefine(){
// Handle having the method called in my special widget way
}
}
)
更新
Java自8版本起,现已正式成为Lambda语言。
现在您可以使用以下语法:
MathOperation addition = (int a, int b) -> a + b;
System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
他提到了Lambda演算。
Lambda演算(也写作λ-演算)是一种用于函数定义、函数应用和递归的形式系统。[...]
[...] 未打类型的Lambda演算是函数式编程的最初灵感来源,特别是Lisp,而带类型的Lambda演算则成为现代类型系统的基础。
来自维基百科: 在Lisp和Python等编程语言中,lambda是一个运算符,用于表示匿名函数或闭包,遵循λ演算的用法。在Python语言中使用lambda的一个例子是下面这段计算机代码,它通过每个条目的最后一个字符按字母顺序对列表进行排序:
>>> list = ['woman', 'man', 'horse', 'boat', 'plane', 'dog']
>>> sorted(list, key=lambda word: word[-1])
['horse', 'plane', 'dog', 'woman', 'man', 'boat']
* In the C# programming language a lambda expression is an anonymous function that can contain expressions and statements
JavaScript 允许定义匿名函数,即不绑定到标识符的函数。这种函数也称为 Lambda 抽象,由于 JS 支持此功能,因此它被称为 Lambda 语言。
属性:在需要立即执行函数或短期使用函数的情况下,需要此函数,其中没有给函数命名的重要性。
与 Java、C、C++ 和 PHP 等语言不同,在 JS 中,匿名函数用于闭包和柯里化。