language-agnostic lambda computer-science terminology

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.



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



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.