What is a lambda language?

I was reading "JavaScript: The Good Parts" and the author mentions that JavaScript is the first of the lambda languages to be launched.

JavaScript's functions are first class objects with (mostly) lexical scoping. JavaScript is the first lambda language to go mainstream. Deep down, JavaScript has more in common with Lisp and Scheme than with Java. It is Lisp in C's clothing. This makes JavaScript is remarkably powerful language.

I didn't get what is a lambda language. What are the properties of such a language and how is it different from languages like Java, C, C++ and Php?


I've never heard anyone use the term "lambda language," and the only plausible definitions I can think of would exclude JavaScript as "the first."

That said, I suspect he may mean either:

  • Functional languages: a class of languages in which computation is (or can be) modeled as a stateless composition of (possibly higher-order) functions. LISP, Scheme, ML, Haskell, etc. are frequently ascribed to this class, although several of these are more properly mixed paradigm or "functional optional" languages. Javascript arguably contains the necessary features to make a "functional style" of programming possible.
  • Languages which allow the creation of anonymous functions (using the function syntax in JavaScript; this is written lambda in many languages, hence possibly "lambda languages."
  • Both usages are derived from the use of the greek letter lambda to denote function abstraction in the lambda calculus, the model of computation devised by Alonzo Church and upon which functional programming is based.

    Edit: looked at Google Books result---"first to go mainstream"; well, that's arguable. I'd put forward that LISP was at one point at least reasonably mainstream. It's a fair point though, JavaScript's semantics are directly inspired by Scheme and it certainly reached a larger audience than any other language that can make similar claims.


    A lambda language, in simple terms, is a language that allows passing a function to another function, where the function is treated as any other variable. Also, you should be able to define this function to be passed anonymously (or inline). PHP 5.3 added support for lambda functions. Was JavaScript the first mainstream language? Lisp has been widely used in educational settings before JavaScript and also in customizing our beloved Emacs http://www.gnu.org/software/emacs/manual/html_node/eintr/

    Here's an example

    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})
    

    How is it different from C? In C, you can pass pointer to functions, but you can't define it inline anonymously.

    In Java (before version 8), to achieve the same effect, you must pass an object that implements an interface, which actually can be defined anonymously inline.


    He refers to Lambda calculus.

    Lambda calculus, also written as λ-calculus, is a formal system for function definition, function application and recursion. [...]

    [...] with untyped lambda calculus being the original inspiration for functional programming, in particular Lisp, and typed lambda calculi serving as the foundation for modern type systems.

    链接地址: http://www.djcxy.com/p/51266.html

    上一篇: (lambda)函数闭包捕获什么?

    下一篇: 什么是lambda语言?