language agnostic - ¿Qué es un Lambda?
language-agnostic computer-science (7)
¿Podría alguien proporcionar una buena descripción de lo que es un Lambda? Tenemos una etiqueta para ellos y están en los secretos de C # question, pero todavía tengo que encontrar una buena definición y explicación de lo que son en primer lugar.
"Lambda" se refiere al cálculo Lambda o a una expresión lambda específica. El cálculo lambda es básicamente una rama de la lógica y las matemáticas que se ocupa de las funciones y es la base de los lenguajes de programación funcionales .
~ William Riley-Land
En respuesta a las respuestas anteriores:
-Lo importante de las funciones anónimas no es que no requieran un nombre.
-Closures son un concepto separado.
-Un artículo gigantesco de Wikipedia no lo aclara.
Aquí está mi respuesta en 3 partes:
1. Una lambda es una función que también es una expresión. Esto es lo importante.
2. Muchos lenguajes que implementan las llamadas "lambdas" agregan algo de azúcar sintáctico para hacer que escribir estas breves funciones sea más fácil y rápido, pero esto no es necesario.
3. Algunos idiomas pueden requerir que un lambda no tenga efectos secundarios . Esa sería una lambda más pura en el sentido funcional.
Cuando una función es una expresión, es un "ciudadano de primera clase" dentro del lenguaje. Puedo hacer todas las cosas importantes con esto:
x = lambda(){ return "Hello World"; }
doit( 1, 2, lambda(a,b){ return a > b; }, 3 )
x = (lambda(a){ return a+1; }) + 5 // type error, not syntax error
(lambda(a,b){ print(a); log(b); })( 1, 2 ) // () is valid operator here
Es solo una función anónima declarada en línea, más típicamente asignada a un delegado cuando no desea escribir una función hecha y derecha.
En lenguajes como lisp / scheme, a menudo se transmiten bastante liberalmente como parámetros de función, pero la expresión idiomática en C # típicamente encuentra que lambdas solo se usa para evaluación lenta de funciones, como en linq, o para hacer que el código de manejo de eventos sea un poco más tonto.
Los cierres, las lambdas y las funciones anónimas no son necesariamente lo mismo.
Una función anónima es cualquier función que no tiene (o, al menos, necesita) su propio nombre.
Un cierre es una función que puede acceder a las variables que estaban en su alcance léxico cuando se declaró, incluso después de que se hayan salido del alcance. Las funciones anónimas no necesariamente tienen que ser cierres, pero están en la mayoría de los idiomas y se vuelven bastante menos útiles cuando no lo son.
Una lambda no está tan bien definida en lo que respecta a la informática. Muchos idiomas ni siquiera usan el término; en su lugar, simplemente los llamarán cierres o funciones anónimas o inventarán su propia terminología. En LISP, un lambda es solo una función anónima. En Python, un lambda es una función anónima específicamente limitada a una sola expresión; algo más, y necesitas una función nombrada. Lambdas son cierres en ambos idiomas.
Realmente no hay algo como ''un lambda'' en la programación. Depende del idioma, etc.
En resumen, normalmente un lenguaje que ''tiene lambdas'' usa el término para funciones anónimas o, en algunos casos, cierres. Como tal, en Ruby:
f = lambda { return "this is a function with no name" }
puts f.call
Recortado de la wikipedia: http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word
En lenguajes de programación como Lisp y Python, lambda es un operador que se utiliza para denotar funciones o cierres anónimos, siguiendo el uso del cálculo lambda.
También se llama cierres o funciones anónimas. Encontré la mejor descripción here . Básicamente, bloque de código en línea que se puede pasar como argumento a una función.