Estaba leyendo "JavaScript: The Good Parts" y el autor menciona que JavaScript es el primero de los lenguajes lambda que se lanzará.
Las funciones de JavaScript son objetos de primera clase con (en su mayoría) alcance léxico. JavaScript es el primer lenguaje lambda en generalizarse. En el fondo, JavaScript tiene más en común con Lisp y Scheme que con Java. Es Lisp con la ropa de C. Esto hace que JavaScript sea un lenguaje notablemente poderoso.
No entendí lo que es un lenguaje lambda. ¿Cuáles son las propiedades de dicho lenguaje y en qué se diferencia de lenguajes como Java, C, C ++ y Php?
javascript
lambda
sushil bharwani
fuente
fuente
Respuestas:
Nunca escuché a nadie usar el término "lenguaje lambda", y las únicas definiciones plausibles que puedo pensar excluirían JavaScript como "la primera".
Dicho esto, sospecho que puede querer decir:
function
sintaxis en JavaScript; esto está escritolambda
en muchos lenguajes, de ahí posiblemente "lenguajes lambda".Ambos usos se derivan del uso de la letra griega lambda para denotar la abstracción de funciones en el cálculo lambda, el modelo de cálculo ideado por Alonzo Church y en el que se basa la programación funcional.
Editar: miró el resultado de Google Books --- "primero en generalizarse"; bueno, eso es discutible. Yo expuse que LISP fue en un momento al menos razonablemente convencional. Sin embargo, es un buen punto, la semántica de JavaScript está directamente inspirada en Scheme y ciertamente llegó a una audiencia más grande que cualquier otro lenguaje que pueda hacer afirmaciones similares.
fuente
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, debería poder definir esta función para que se pase de forma anónima (o en línea). PHP 5.3 agregó soporte para funciones lambda. ¿Fue JavaScript el primer lenguaje convencional? Lisp se ha utilizado ampliamente en entornos 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/
Aquí hay 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})
¿En qué se diferencia de C? En C, puede pasar puntero a 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 de forma anónima en línea.
fuente
Se refiere al cálculo Lambda .
fuente
He visto una lambda definida como una función anónima y como una referencia a una función. Javascript es compatible con ambos:
setTimeout(function(){ /* an anonymous function */ }, 100) var f = function(){ /* function ref */ }
Aquí es donde JS obtiene gran parte de su poder y flexibilidad. Java es compatible con la primera hasta cierto punto (implementaciones de interfaz anónimas),
pero no con la última; consulte a continuación la actualización para Java 8.No me queda claro cuál (o ambos) de estos es la definición adecuada de una lambda.
Definitivamente JS no es el primer idioma que admite estas funciones. De memoria, creo que es una pequeña charla que los entusiastas del lenguaje siempre se entusiasman con el apoyo de lambdas.
Por cierto: 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 swing). Algo como esto (de memoria, no compilado):
someGuiContainer(new WidgetInterface() { public void importantMethodToDefine(){ // Handle having the method called in my special widget way } } )
Actualizar
Java, a partir del 8, ahora es 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));
Fuente de código
fuente
En el material de curso abierto del MIT llamado estructura e interpretación de programas de computadora, un libro de Hal Abelson, Jerry Sussman y Julie Sussman. Hablan de Scheme, que es un dialecto de LISP y allí explican una explicación muy detallada y clara de qué es lambda y Scheme LISP y los lenguajes en general. Le recomiendo encarecidamente que lo consulte si desea tener una comprensión realmente clara y profunda de la programación de computadoras. Explicarte tomaría tres veces más tiempo que si fueras allí y solo leyeras el libro o vieras los tutoriales que lo explican perfectamente, es genial.
Javascript se basa principalmente en el lenguaje Scheme y su padre Lisp, y además tomó su estructura lamda y se generalizó con ella.
fuente
De wikipedia: en lenguajes de programación como Lisp y Python, lambda es un operador que se usa para denotar funciones o cierres anónimos, siguiendo el uso del cálculo lambda. Un ejemplo de este uso de lambda en el lenguaje Python es esta sección de código de computadora que ordena una lista alfabéticamente 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
fuente
JavaScript permite definir una 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 es significativo dar nombre a la función.
Es diferente de lenguajes como Java, C, C ++ y PHP, ya que en JS se utilizan funciones anónimas para Closure y Currying.
fuente