Expresión lambda

Esto significa que las funciones anónimas necesitan ser implementadas utilizando clausuras o closures.

Esta función normalmente acepta una función de comparación arbitraria a la cual se le suministra dos elementos, la función indica si estos son iguales o si uno es mayor o menor que el otro (usualmente se indica mediante la devolución de un número negativo, cero o un número positivo).

El siguiente ejemplo se aplica el cuadrado a cada elemento de una matriz con una función anónima.

La función anónima acepta un argumento y lo multiplica por sí mismo (calcula su cuadrado).

La forma anterior es desaconsejada por los desarrolladores del lenguaje, quienes sostienen que la forma presentada a continuación tiene el mismo significado y está más alineada con la filosofía del lenguaje: La función de filtro devuelve todos los elementos de una lista que al ser evaluados utilizando una determinada función regresan True.

La función anónima comprueba si el argumento que se le pasa es par.

En su lugar, tanto el mapa como el filtro pueden crearse utilizando la función doblar.

Utilizando la extensión de "bloques" anteriormente mencionada y el Grand Central Dispatch (libdispatch), el código podría parecer más simple: El código con bloques debe ser compilado con el parámetro -fblocks y enlazado con -lBlocksRuntime.

El mecanismo permite que estas variables sean capturadas por valor o por referencia.

La siguiente tabla muestra esto: Las variables capturadas por valor son constantes por defecto.

Puesto que es una referencia a la variable stack total, esta puede cambiar su valor.

Sin embargo, debido a que la mayoría de las funciones lambda son pequeñas y locales en el ámbito, son candidatos probables para expansión inline, y por lo tanto no necesitan almacenamiento añadido para las referencias.

La sintaxis completa para un delegado en línea es: Si no es ambiguo, se puede omitir el tipo de retorno y la palabra clave delegate.

Desde la versión 2.0, D asigna clausuras en la pila a menos que el compilador pueda probar que es innecesario; La palabra clave scope se puede utilizar para forzar la asignación de pila.

[13]​ Las expresiones Lambda se convierten en "interfaces funcionales" (definidas como interfaces que contienen solo un método abstracto además de uno o más métodos predeterminados o estáticos[13]​), como en el ejemplo siguiente: En este ejemplo, se declara una interfaz funcional denominada IntegerMath.

Las expresiones Lambda que implementan IntegerMath se pasan al método apply() para ejecutarse.

Las expresiones lambda en Java 8 poseen las siguientes limitaciones: JavaScript/ECMAScript permite el uso de funciones anónimas.

El () podría ser ([], {}, 42, "abc", function() {}) siempre que la expresión se evalúe como una función.

Clojure soporta funciones anónimas con la forma especial fn y la sintaxis del lector #().

En Perl 6, todos los bloques (incluso aquellos asociados con if, while, etc.) son funciones anónimas.

En el ejemplo anterior, cada invocación de create_function crea una nueva función, la cual existe para el resto del programa, y no puede ser recolectada como basura, haciendo que ocupe memoria de forma irreversible en el programa.

PHP 5.3 soporta clausuras pero las variables deben ser explícitamente indicadas como tales: La variable $x está enlazada por referencia para al invocar $func este lo modifique y los cambios sean visibles fuera de la función.

Es posible escribir el ejemplo anterior como: Las funciones anónimas (en general los "predicados" anónimos) se introdujeron en la versión 7.2. de Visual Prolog.

Sin embargo, estas restricciones hacen que sea una versión muy limitada de una función normal.

La versión 3.0 del lenguaje, lanzada en noviembre de 2007 junto a .NET Framework v3.5, soporta completamente las funciones anónimas.

[21]​ Mientras la función sea anónima, no se puede asignar a una variable implícitamente tipada, ya que la sintaxis lambda podría ser una función anónima o un árbol de expresiones, y la elección no puede ser realizada automáticamente por el compilador.

El nombre no está expuesto al código de la aplicación a menos que se utilice reflexión.

Visual Basic .NET 2008 introdujo las funciones anónimas a través de la estructura lambda.

Desde Visual Basic .NET 2010 se es posible definir expresiones lambda multilíneas las cuales además ya no requieren que retornen algún valor.

En el siguiente ejemplo se utiliza una función lambda multilinea para definir un Thread.