我在阅读“ JavaScript:好的部分”,作者提到JavaScript是要发布的第一种lambda语言。
JavaScript的函数是具有(主要是)词法作用域的一流对象。JavaScript是第一种成为主流的Lambda语言。内心深处,与Lisp和Scheme相比,JavaScript与Java有更多的共同点。是C的衣服上的Lisp。这使得JavaScript是非常强大的语言。
我没有得到什么是lambda语言。这种语言的特性是什么,它与Java,C,C ++和Php等语言有什么不同?
我在阅读“ JavaScript:好的部分”,作者提到JavaScript是要发布的第一种lambda语言。
JavaScript的函数是具有(主要是)词法作用域的一流对象。JavaScript是第一种成为主流的Lambda语言。内心深处,与Lisp和Scheme相比,JavaScript与Java有更多的共同点。是C的衣服上的Lisp。这使得JavaScript是非常强大的语言。
我没有得到什么是lambda语言。这种语言的特性是什么,它与Java,C,C ++和Php等语言有什么不同?
Answers:
我从未听说过有人使用“ lambda语言”一词,而且我能想到的唯一似乎合理的定义将JavaScript排除为“第一个”。
话虽如此,我怀疑他可能意味着:
functionJavaScript中的语法;这是用lambda多种语言编写的,因此可能是“ lambda语言”。两种用法均源自希腊字母lambda的使用,以表示lambda微积分中的函数抽象,由Alonzo Church设计的计算模型以及函数式编程所基于。
编辑:看过Google图书的结果---“率先成为主流”;好吧,这是有争议的。我曾提出LISP在某一点上至少是合理的主流。不过,这很公平,JavaScript的语义是直接受Scheme启发的,它的受众肯定比其他任何可以提出类似主张的语言都要多。
简单来说,lambda语言是一种允许将一个函数传递给另一个函数的语言,其中该函数被视为任何其他变量。同样,您应该能够定义此函数以匿名方式(或内联)传递。PHP 5.3添加了对lambda函数的支持。JavaScript是第一主流语言吗?Lisp已在JavaScript之前的教育环境中广泛使用,并且还用于自定义我们心爱的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})
与C有什么不同?在C语言中,您可以将指针传递给函数,但是不能匿名内联定义它。
在Java(版本8之前)中,要实现相同的效果,必须传递一个实现接口的对象,该对象实际上可以匿名内联定义。
我看到过一个lambda,它定义为匿名函数和对函数的引用。Javascript同时支持:
setTimeout(function(){ /* an anonymous function */ }, 100)
var f = function(){ /* function ref */ }
这就是JS获得其强大功能和灵活性的地方。Java在某种程度上支持前一种(匿名接口实现),但不支持后者 -有关Java 8的更新,请参见下文。
我不清楚这两个(或两者)是lambda的正确定义。
JS绝对不是支持这些功能的第一语言。从记忆的角度出发,我认为语言爱好者一直热衷于支持lambda的话题。
顺便说一句:在Java中,匿名类通常用于动态传递一个类定义作为参数(经常使用)。这样的事情(从内存中,未编译):
someGuiContainer(new WidgetInterface()
{
public void importantMethodToDefine(){
// Handle having the method called in my special widget way
}
}
)
更新资料
从8开始,Java现在正式是Lambda语言。
现在,您可以使用以下语法:
MathOperation addition = (int a, int b) -> a + b;
System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
在麻省理工学院的开放式课件中,称为“计算机程序的结构和解释”,由哈尔·阿伯森(Hal Abelson),杰里·萨斯曼(Jerry Sussman)和朱莉·萨斯曼(Julie Sussman)所著。他们讨论了Scheme,这是LISP的一种方言,在那里他们解释了lambda是什么以及Scheme LISP和一般语言的非常详细和清晰的解释。如果您希望对计算机编程有一个真正清晰而深刻的理解,我强烈建议您看一下。向您解释要花费去那里的时间是您去那里读书或观看教程的三倍,这真是天才。
Javascript主要基于语言Scheme,它是Lisp的父亲,此外,它采用了lamda结构并成为主流。
来自维基百科:在诸如Lisp和Python的编程语言中,lambda是一种运算符,用于表示使用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