Pregunta

¿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 la pregunta de C #, pero todavía tengo que encontrar una buena definición y explicación de lo que son en primer lugar.

¿Fue útil?

Solución

Los cierres, lambdas y 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 variables que estaban en su ámbito léxico cuando se declaró, incluso después de que se hayan caído del ámbito. Las funciones anónimas no necesariamente tienen que ser cierres, pero están en la mayoría de los idiomas y se vuelven menos útiles cuando no lo son.

Una lambda ... no está tan bien definida en cuanto a informática. Muchos idiomas ni siquiera usan el término; en cambio, simplemente los llamarán cierres o funciones anónimas o inventarán su propia terminología. En LISP, una lambda es solo una función anónima. En Python, una lambda es una función anónima específicamente limitada a una sola expresión; algo más, y necesitas una función con nombre. Las lambdas son cierres en ambos idiomas.

Otros consejos

También se llaman cierres o funciones anónimas. Encontré la mejor descripción aquí . Básicamente, un bloque de código en línea que se puede pasar como argumento a una función.

" Lambda " se refiere al cálculo de Lambda o a una expresión lambda específica. El cálculo de 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 lenguajes de programación funcional .

~ William Riley-Land

Es solo una función anónima declarada en línea, generalmente asignada a un delegado cuando no desea escribir una función completa.

En lenguajes como lisp / esquema, a menudo se transmiten de manera bastante liberal como parámetros de función, pero la expresión idiomática en C # generalmente encuentra que lambdas se usa solo para la evaluación perezosa de funciones, como en linq, o para hacer que un código de manejo de eventos sea bit terser.

Realmente no hay tal cosa como 'una 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. Así, en Ruby:

f = lambda { return "this is a function with no name" }
puts f.call

En respuesta a las respuestas anteriores:
-Lo importante de las funciones anónimas no es que no requieran un nombre.
-Los cierres son un concepto separado.
-Un artículo gigantesco de Wikipedia no lo aclara más.

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 idiomas que implementan las llamadas "lambdas" agregue algo de azúcar sintáctico para que escribir estas funciones cortas sea más fácil y rápido, pero esto no es obligatorio.
3. Algunos idiomas pueden requerir que una lambda no tenga ningún efecto secundario . 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

Recortado 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 utilizado para denotar funciones o cierres anónimos, siguiendo el uso del cálculo lambda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top