什么是lambda语言?

sus*_*ani 86 javascript lambda

我正在阅读"JavaScript:The Good Parts",作者提到JavaScript是第一个推出的lambda语言.

JavaScript的函数是具有(主要)词法范围的第一类对象.JavaScript是第一个成为主流的lambda语言.在内心深处,JavaScript与Lisp和Scheme有更多共同点,而不是Java.这是C的服装中的Lisp.这使得JavaScript成为非常强大的语言.

我没有得到什么是lambda语言.这种语言有哪些属性,它与Java,C,C++和Php等语言有什么不同?

Jua*_*des 47

简单来说,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})
Run Code Online (Sandbox Code Playgroud)

它与C有什么不同?在C中,您可以将指针传递给函数,但不能匿名内联.

在Java(版本8之前)中,要实现相同的效果,必须传递实现接口的对象,实际上可以匿名定义内联.


Der*_*urk 36

我从来没有听过任何人使用"lambda语言"这个词,我能想到的唯一合理的定义会将JavaScript排除在"第一个"之外.

那就是说,我怀疑他可能意味着:

  • 功能语言:一类语言,其中计算(或可以)被建模为(可能是更高阶)函数的无状态组合.LISP,Scheme,ML,Haskell等经常归于这一类,尽管其中一些是更恰当的混合范式或"功能可选"语言.Javascript可以说包含了使编程的"功能样式"成为可能的必要功能.
  • 允许创建匿名函数的语言(使用functionJavaScript中的语法;这是用lambda多种语言编写的,因此可能是"lambda语言".

这两种用法都源于使用希腊字母lambda来表示lambda演算中的函数抽象,这是由Alonzo Church设计的计算模型以及函数式编程所依据的.

编辑:看了谷歌图书的结果---"首先走向主流"; 好吧,那是有争议的.我提出LISP至少在某种程度上是合理的主流.这是一个公平的观点,JavaScript的语义直接受到Scheme的启发,它肯定比其他可以提出类似声明的语言的受众更多.

  • 这是一个值得探讨的大话题.去年我就在你现在的位置:我找到了Crockford的论文和讲座,想要了解闭合.我建议你从维基百科开始,然后转到几篇文章:John Hughes"为什么功能编程很重要"http://www.scribd.com/doc/26902/whyfp,Slava Akhmechet"我们其他人的功能编程"http://www.defmacro.org/ramblings/fp.html有很多书可以扩展你的想法:查看Little Schemer以了解Scheme,然后转到计算机的结构和解释程式. (8认同)
  • JavaScript被描述为"第一个"的原因是因为该声明符合"走向主流"的要求.我认为很明显,JavaScript确实是日常工作中日常工作者使用的第一种功能风格的语言. (5认同)
  • @sushil:有很多关于这个主题的介绍性文献.但总的来说,它是一种编程风格,强调将程序视为数学对象而不是顺序指令或抽象对象之间的交互.例如,函数式语言更喜欢递归到迭代,使用不可变数据结构,并使用高阶函数而不是"函数对象"或"策略模式".高阶函数意味着可以在(作为参数)或产生(作为返回值)其他函数上操作的函数. (5认同)