Funciones lambda anónimas (programación funcional)

10

¿Qué son las funciones anónimas (lambda)? ¿Cuál es la definición formal de una función anónima en un lenguaje de programación funcional?

En mis términos simples, cuando estoy programando en esquema / lisp, diría que una función anónima (lambda) es una función que no está vinculada a un identificador.

¿Es eso todo lo que puedes decir formalmente sobre una función lambda? Creo que hay más detalles que se pueden agregar a esta definición simple. Por favor explique, y gracias!

CodeKingPlusPlus
fuente

Respuestas:

10

En mi opinión, eso es todo lo que realmente puedes decir sobre ellos.

La idea es que en un lenguaje de orden superior, una función es solo otro tipo de valor. De la misma manera que puede tener (3 + 4) sin un identificador en C, puede tener (lambda (x) + (3 x))) sin un identificador en el esquema.

La clave aquí no es que haya algo especial sobre las funciones anónimas. Son solo las restricciones de otros idiomas las que requieren que las funciones se traten de manera diferente a cualquier otro valor. Las definiciones especiales son para lenguajes de procedimiento que no los permiten, no para lenguajes funcionales con do.

jmite
fuente
11

En el cálculo lambda, todas las funciones (términos) son anónimas. Esta es una propiedad esencial del cálculo lambda: puede componer funciones complejas a partir de funciones más simples sin darles nombres.

En los lenguajes de programación, en la mayoría de los casos es deseable dar nombres a las funciones, porque esta es la forma en que pensamos y hace que el código sea legible para los humanos. Pero la compilación finalmente elimina los nombres al producir un ejecutable (si no tenemos en cuenta la información de depuración).

Si un lenguaje permite expresar funciones anónimas (es decir, funciones sin nombres), puede dar una ventaja tanto a los programadores como a los compiladores: los programadores a menudo pueden escribir código más corto, y los compiladores pueden optimizar mejor, sabiendo que una función anónima se usa solo en el momento dado lugar y no en ningún otro lugar.

Petr Pudlák
fuente
1

Depende de en qué parte de su pregunta ponga énfasis. Si es específicamente la propiedad de ser anónimo para funciones anónimas, entonces la única respuesta es que son valores no vinculados . Si habla de funciones en general, las funciones anónimas son probablemente la manifestación más visible del uso del cálculo lambda en un entorno funcional, para lenguajes aplicativos .

De hecho, desde el punto de vista del cálculo lambda, las expresiones lambda son la construcción muy sintáctica utilizada para crear enlaces. Recordemos la notación utilizada en el cálculo lambda:

λF.λX.FX

FXFX

Un lenguaje generalmente ofrece formas, como let(ML como lenguajes, esquema) o define(esquema) para crear enlaces utilizables en el nivel superior (o dentro de construcciones sintácticas más complejas que las funciones, como módulos u objetos), pero la única herramienta necesaria para enlaces es la lambda en los niveles inferiores.

Si observa idiomas como esquemas o dialectos lisp, su fundamento fundamental es el cálculo lambda, y muchas formas especiales son realmente lambdas recubiertas de azúcar.

Para los lenguajes concatenativos , la historia es ligeramente diferente. Las lambdas no son necesarias, y en realidad son contraproducentes. ¿Cuál es el punto de definir lambdas anónimas, cuando todo es una función ?

De alguna manera hay una dualidad entre estos dos tipos de lenguaje. El último se centra en la combinación de funciones sin puntos y, por lo tanto, intenta representar todo como funciones, mientras que el primero trabaja en un cálculo más elaborado y hace un esfuerzo para tener funciones como valores de primera clase, como cualquier otro valor del lenguaje. A este respecto, uno podría ver lambdas como resultado de ese esfuerzo.

Algunos consejos sobre el tema introducido (mal) en esta respuesta:

didierc
fuente