2011-02-15 12 views
10

Vi esta pregunta en una de las ofertas de trabajo y se pregunta qué es una función lambda y cuál es su relación con la función de orden superior. Ya sé cómo utilizar la función lambda pero no del todo seguro de explicar, así que hice un poco de google y encontré esto: What is a lambda (function)? y esto http://en.wikipedia.org/wiki/Higher-order_function¿Es lambda un tipo de función de orden superior?

La definición de HOF que dice debería al menos tomar una o más funciones o devolver una función encaja en lo que es una lambda, entonces mi pregunta es ... ¿es una lambda un tipo de HOF?

¿O alguien que pueda explicar su relación aún más?

Respuesta

16

La definición de HOF que dice debe tener al menos una o más funciones o devolver una función encaja en lo que una lambda es

¿Lo hace? (lambda (x) (x+1)) (o x => x+1 o \x -> x+1 o fun x -> x+1, dependiendo de la sintaxis de su idioma) es un lambda. Sin embargo, no toma una función como argumento (toma un int), ni devuelve uno.

Así que no, las lambdas no son necesariamente funciones de orden superior, aunque pueden serlo.

A lambda es una función anónima. Como tal, es una función. Pero solo es una función de orden superior si toma o devuelve una función, que la mayoría de las lambdas no tienen. Sin embargo, las lambdas se utilizan con mayor frecuencia como argumentos para funciones superiores (es decir, si lo hace Where(s => s.Length > 5)Where es una función de orden superior y s => s.Length > 5 es una lambda (de primer orden), por lo que están relacionadas.

+0

Gracias, creo que lo entiendo ahora. – Marconi

0

La sintaxis Lambda facilita la implementación de funciones de orden superior. Por ejemplo, currying es una función de orden superior facilitada por la sintaxis lambda.

Probablemente desee estudiar el operador de lambda para comprender las funciones de orden superior.

5

Depende de lo que quiere decir con "lambda".

El siguiente párrafo de la página de Wikipedia que vinculó describe claramente la relación desde un punto de vista teórico de tipo.

"En el cálculo lambda sin tipo, todas las funciones son de orden superior, en un cálculo con tipo lambda, del que se derivan los lenguajes de programación más funcionales, funciones de orden superior son generalmente aquellos con tipos que contienen más de una flecha En la programación funcional, se dice que las funciones de orden superior que devuelven otras funciones están currificadas ".

En otras palabras, en términos teóricos tipo, una función (lambda) es siempre de orden superior en el cálculo lambda sin tipo, y puede ser mayor orden en el cálculo lambda mecanografiada ... dependiendo de su tipo de firma .

Si hablamos de la construcción "lambda" implementada por algunos lenguajes de programación, depende de 1) el idioma real del que habla, y 2) del uso particular en un idioma particular.

En los idiomas en los que las lambdas son funciones anónimas de primera clase, cabría esperar que sean capaces de expresar funciones de orden superior. Pero una función de orden superior es una función que toma otras funciones como argumentos y/o las devuelve como resultados. Y no todos los usos de "lambda" en una aplicación harán eso.

+0

Ah. Debería haberme aclarado que el lenguaje en este sentido es Python. – Marconi

+1

@Marconi: mi respuesta aún se aplica. –

Cuestiones relacionadas