2010-10-05 15 views
82

Estaba leyendo "JavaScript: The Good Parts" y el autor menciona que JavaScript es el primero de los lenguajes lambda que se lanzará.¿Qué es un lenguaje lambda?

Las funciones de JavaScript son objetos de primera clase con alcance (principalmente) léxico. JavaScript es el primer lenguaje lambda que se usa para la mayoría de las personas. En el fondo, JavaScript tiene más en común con Lisp y Scheme que con Java. Es Lisp en la ropa de C. Esto hace que JavaScript sea un lenguaje notablemente poderoso.

No recibí lo que es un lenguaje lambda. ¿Cuáles son las propiedades de dicho lenguaje y cómo es diferente de los lenguajes como Java, C, C++ y Php?

+6

Lambda significa expresión anónima. Así que lenguaje lambda -> lenguaje con expresiones anónimas – bevacqua

+0

Google Books link, FYI: http://books.google.co.uk/books?id=PXa2bby0oQ0C&pg=PA3&lpg=PA3&dq=lambda+language+crockford&source=bl&ots=HHtnnar4jI&sig=EmkjJCBHLOn5shPtgKzaZ_tQ4xg&hl= en & ei = okirTMyYGoqQjAfxuL3qBw & sa = X & oi = book_result & ct = result & resnum = 2 & ved = 0CBkQ6AEwAQ # v = onepage & q = lambda% 20language & f = false –

+3

Ver [lambda calculus] (http://en.wikipedia.org/wiki/Lambda_calculus) en wikipedia. – Oded

Respuesta

34

nunca he oído a nadie usar el término "lenguaje lambda", y las únicas definiciones plausibles que se me ocurre excluiría JavaScript como "el primero".

Dicho esto, sospecho que puede significar:

  • Los lenguajes funcionales: una clase de idiomas en los que el cálculo es (o puede ser) modela como una composición sin estado de las funciones (posiblemente de orden superior). LISP, Scheme, ML, Haskell, etc. se asignan con frecuencia a esta clase, aunque varios de estos son paradigmas mixtos o lenguajes "funcionales opcionales" más adecuadamente. Javascript podría contener las características necesarias para hacer posible un "estilo funcional" de programación.
  • Idiomas que permiten la creación de funciones anónimas (utilizando la sintaxis function en JavaScript, lo que está escrito lambda en muchos idiomas, por lo tanto, posiblemente, "idiomas lambda."

Ambos usos se derivan de la utilización del griego carta lambda para denotar la abstracción de funciones en el cálculo lambda, el modelo de computación ideado por Alonzo Church y sobre el cual se basa la programación funcional.

Editar: mira el resultado de Google Books --- "primero en ir a la corriente principal"; eso es discutible. Yo propongo que LISP fue en un momento al menos razonablemente convencional. Sin embargo, es un punto justo , La semántica de JavaScript está directamente inspirada por Scheme y sin duda llegó a un público más amplio que cualquier otro idioma que pueda hacer afirmaciones similares.

+0

, por favor vea el enlace publicado por Lucas Jones en el enlace del libro de Google, donde lleva a la página exacta de la que estoy hablando. gracias por tu respuesta –

+5

El motivo por el cual JavaScript se describe como 'el primero' es porque la declaración está calificada con 'para ir a la corriente principal'. Creo que es bastante claro que JavaScript es de hecho el primer lenguaje de estilo funcional para ser utilizado por los programadores de todos los días en los trabajos de todos los días. – rfunduk

+1

qué quiere decir cuando dice "estilo funcional" de lenguaje de programación. Soy de origen java e intento aprender javascript, ¿cómo es diferente? –

0

De wikipedia: En lenguajes de programación como Lisp y Python, lambda es un operador que se utiliza para denotar funciones anónimas o cierres, siguiendo el uso del cálculo lambda. Un ejemplo de este uso de la lambda en el lenguaje Python es esta sección de código informático que ordena una lista en orden alfabético por el último carácter de cada entrada:

>>> 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 
4

Se refiere a Lambda calculus.

cálculo lambda, también escrito como λ-cálculo, es un sistema formal para la definición de la función, la aplicación de funciones y recursividad. [...]

[...] con el cálculo lambda sin tipo siendo la inspiración original para la programación funcional, en particular Lisp, y los cálculos lambda mecanografiados que sirven de base para los sistemas de tipo moderno.

46

Un lenguaje lambda, en términos simples, es un lenguaje que permite pasar una función a otra función, donde la función se trata como cualquier otra variable. Además, debe poder definir que esta función se transmita de forma anónima (o en línea). PHP 5.3 agregó soporte para funciones lambda. ¿Era JavaScript el primer idioma principal? Lisp ha sido ampliamente utilizado en los centros educativos antes de JavaScript y también en la personalización de nuestro querido Emacs http://www.gnu.org/software/emacs/manual/html_node/eintr/

He aquí un ejemplo

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ómo se diferencia de C? En C, puede pasar el puntero a las funciones, pero no puede definirlo en línea de forma anónima.

En Java (antes de la versión 8), para lograr el mismo efecto, debe pasar un objeto que implemente una interfaz, que en realidad se puede definir anónimamente en línea.

+1

"Lisp ha sido ampliamente utilizado" por quién? Siempre lo he sabido, ya que los profesores siempre lo discutirían, pero en la práctica, nunca he conocido a nadie que haya usado Lisp. Diría que cualquiera podría encontrar a alguien que conozcan que haya usado Javascript, lo que hace que Javascript sea mucho más "convencional". – palswim

+0

"PHP 5 agregó soporte para funciones lambda". En realidad, yo era PHP 5.3 que introdujo funciones lambda. – Crozin

+0

Conocí a algunas personas que lo usaban en un contexto de negocios, pero como alguna vez fue Pascal, se usa ampliamente en entornos educativos. –

4

He visto una lambda definida como una función anónima y como una referencia a una función. Javascript admite ambos:

setTimeout(function(){ /* an anonymous function */ }, 100) 

var f = function(){ /* function ref */ } 

Aquí es donde JS obtiene mucha de su potencia y flexibilidad. Java soporta la primera hasta cierto punto (implementaciones de interfaces anónimos), pero no el último - véase más adelante para la actualización para Java 8.

Su claro para mí, que (o ambos) de estos es la definición apropiada de un lambda .

JS definitivamente no es el primer idioma para admitir estas características. Volviendo de la memoria, creo que es pequeño el lenguaje que los entusiastas del lenguaje siempre hablan sobre apoyar a las lambdas.

BTW: en Java, una clase anónima se usa generalmente para pasar una definición de clase sobre la marcha para un argumento (se usa mucho en el swing). Algo como esto (de memoria, no compilados):

someGuiContainer(new WidgetInterface() 
     { 
      public void importantMethodToDefine(){ 
      // Handle having the method called in my special widget way 
      } 
     } 
) 

actualización

Java, a partir del 8, es ahora oficialmente un lenguaje Lambda.

Ahora puede utilizar la siguiente sintaxis:

MathOperation addition = (int a, int b) -> a + b; 
System.out.println("10 + 5 = " + tester.operate(10, 5, addition)); 

Code Source

+1

gracias por la práctica referencia 'relacionada con la web'. –

+1

despejó todas las dudas .. –

1

En curso-ware abierta del MIT llamado estructura e interpretación de los programas de ordenador un libro escrito por Hal Abelson de, Jerry Sussman de y Julie Sussman de. Discuten Scheme, que es un dialecto de LISP y allí explican una explicación muy detallada y clara de lo que es lambda y el esquema LISP y los idiomas en general. Le recomiendo que lo vea si desea tener una comprensión clara y profunda de la Programación de Computadora. Explicarte tomaría tres veces más tiempo que si fueras allí y solo leyeras el libro o verías los tutoriales que lo explican perfectamente, es genial.

Javascript se basa principalmente en el lenguaje Scheme y es el padre de Lisp, y además tomó su estructura lamda y se fue con él.

0
  • JavaScript permite definir la función Anónima que es una función que no está vinculada a un identificador. Dicha función también se conoce como Lambda Abstraction y, dado que JS admite esto, se conoce como Lambda Language.

  • Propiedades: Esta función es necesaria en caso de ejecución inmediata de una función o para uso a corto plazo, donde no tiene importancia dar nombre a la función.

  • Es diferente de idiomas como Java, C, C++ y PHP como en JS Las funciones anónimas se utilizan para el cierre y el currying.