2008-09-29 9 views
89

¿Alguien podría 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.¿Qué es un Lambda?

+0

¿Qué tal [lambda cálculo artículo de Wikipedia] (http://en.wikipedia.org/wiki/Lambda_calculus) para un comienzo? Luego [artículo de programación funcional de Wikipedia] (http://en.wikipedia.org/wiki/Functional_programming_language) como seguimiento. – Thorsten79

+1

posible duplicado de [¿Qué es una lambda (función)?] (Http://stackoverflow.com/questions/16501/what-is-a-lambda-function) – nawfal

+0

expresión de amda explicada [aquí] (https: // chaseyourjava .blogspot.in/2017/11/lamda-expression-in-java-8.html) bellamente. –

Respuesta

123

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 haber caído de de 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.

+0

el término podría estar destinado a implicar el cálculo lambda http://en.wikipedia.org/wiki/Lambda_calculus –

+0

Wow I with I had más de un upvote para dar esta pregunta. He visto tantas respuestas técnicas empantanadas en la terminología, pero esta es conciso y lo señala de inmediato. –

+8

+1 por no usar el término "cerrar" para definir un cierre como si lo hiciera más claro. – Daniel

1

recortadas de 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 de lambda cálculo.

+0

Supongo que se refería a esta línea: 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 de cálculo lambda. Ya había escaneado el artículo pero me perdí eso. – Fred

8

Es simplemente una función anónima declarada en línea, asignada típicamente 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 en C# típicamente encuentra que lambdas solo se usa para evaluación lenta de funciones, como en linq, o para crear código de gestión de eventos un poco terser

17

"Lambda" se refiere a Lambda Calculus oa 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 functional programming languages.

~ William Riley-Tierra

19

también llamados cierres o funciones anónimas .. he encontrado la mejor descripción here. Básicamente, bloque de código en línea que se puede pasar como argumento a una función.

4

No existe realmente nada como 'un lambda' en la programación. Depende del idioma, etc.

En resumen, normalmente un lenguaje que 'tiene lambdas' utiliza 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 
3

Respondiendo a las respuestas anteriores:
-Lo importante de las funciones anónimas no es que no requieran un nombre.
- Las uniones 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 denominadas "lambdas" agregan un azúcar sintáctico para que escribir estas funciones breves sea más fácil y rápido, pero esto no es necesario.
3. Algunos idiomas pueden requerir que una lambda tenga sin 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 idioma. Puedo hacer todas las cosas importantes con él:

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