¿Qué es el código "lambda"?

16

Recientemente escuché a personas hablar sobre el código como "lambda". Nunca he oído hablar de esta frase antes. Qué significa eso?

Oliver Moran
fuente
Lo hizo. Varias veces. Incluso lo intenté varias veces, pero lamentablemente sin éxito. ¿Quizás tengas más suerte? Gracias a quienes respondieron.
Oliver Moran
10
@Oliver, parte de hacer una pregunta aquí es mostrar también lo que has hecho para responder esa pregunta para que las personas no intenten lo mismo que tú y se queden estancados. Al especificar en qué parte de los enlaces de Wikipedia o Google te encontraste confundido, esto garantiza que tu pregunta sea mejor respondida, ya que a nivel general la respuesta puede no ser la que querías, ya que solo hace referencia a lo que no obtuviste anteriormente. Simplemente considere probar lo que otra persona está publicando y vea qué sucede. Puede que se sorprenda de los resultados.
JB King
77
Siento que se podría hacer un rap de esto: "mi código es tan lambda". Pero no puedo hacer que valga la pena. :-)
Paul Nathan
1
@JB King + JB King - Gracias por sus amables comentarios. En términos generales, lo que ambos dicen es sensato. Sin embargo, dependiendo de la consulta, a veces una pregunta breve y abierta es mejor para obtener los tipos de respuestas que no se encuentran en otros lugares. Mi pregunta obtuvo precisamente el tipo de respuestas que estaba buscando. Lo expresé para que así fuera. Espero que las respuestas a continuación sean útiles para otros con la misma pregunta. Es irónico que estoy satisfecho con las respuestas al mismo tiempo que algunos están decepcionados con la pregunta.
Oliver Moran
2
@Paul Nathan: eres un código tan lambda que claramente nunca planeaste trabajar con ningún estándar; ¡Es más duro que una lijadora!
glenatron

Respuestas:

20

Las expresiones lambda son una abstracción (a veces denominada función anónima), una aplicación o una variable (la mayoría de los idiomas también agregan constantes a esta lista). Los términos lambda no son necesariamente funciones, y no necesariamente se pasan como parámetros, aunque esta es una práctica común.

Un ejemplo común de expresiones lambda en C #

Por ejemplo:

List<int> items = new List<int>();
items.add(1);
items.add(2);
items.add(1);
items.add(3);

int CountofOnes = items.FindAll(item => item == 1).Count();

Console.Out.WriteLine(CountofOnes);

dará salida: 2

En este código, paso una construcción lambda a la FindAllfunción del Listobjeto de .NET .

items.FindAll(item => item == 1)

La lambda en esta llamada ejecuta una ecuación simple y devuelve un valor booleano que indica FindAllqué hacer.

Timothy Groote
fuente
2
Eso no es del todo cierto. La expresión lambda es una abstracción (no necesariamente pequeña ), una aplicación o una variable (la mayoría de los idiomas también agregan constantes a esta lista). Los términos lambda no son necesariamente funciones, y no necesariamente se pasan como parámetros.
SK-logic
Tienes razón, enmendaré la respuesta en aras de la claridad.
Timothy Groote
3
Dame un ejemplo de una expresión lambda que no sea una función, por favor.
Ingo
1
@Ingo, esta es una terminología del cálculo lambda, por supuesto. en.wikipedia.org/wiki/Lambda_calculus#Lambda_terms
SK-logic
1
@ SK-logic Prefiero verlo de manera diferente. Lenguajes como Haskell y C # permiten unir funciones a nombres en una construcción let (rec) o en forma de "supercombinadores" (es decir, enlaces de funciones de nivel superior), y esto lo veo como una diferencia tan grave que hago No creo que sea correcto aplicar aquí la terminología lambda original. Porque tal cosa no es posible en LC (precisamente por eso necesita un combinador Y para la recursividad). El resultado de ((\ xy -> x) a) y (const a) en Haskell es el mismo y ambos son aplicaciones, pero solo diría el primer término como "aplicación lambda".
Ingo
3

Función anónima (sin nombre) o un objeto que generalmente está en línea como argumento para otra función.

Por lo tanto, el espacio de nombres está menos contaminado.

Blagovest Buyukliev
fuente
1

Lambda generalmente se refiere a una expresión de función en un contexto de programación funcional.

Esta es una expresión lambda en python:

lambda x: x + 1

Representa una función que incrementa su parámetro xen 1.

Pablo Santa Cruz
fuente