Parece un buen número de lenguajes de soporte estándar function literals estos días. También se llaman anonymous functions, pero no me importa si tienen un nombre. Lo importante es que una función literal es una expresión que produce una función que no se ha definido en otro lugar, por lo que, por ejemplo, en C, &printf
no cuenta.¿Qué idiomas admiten * recursivos * funciones literales/funciones anónimas?
EDITAR para agregar: si tiene una expresión literal de función genuina <exp>
, debe poder pasarla a una función f(<exp>)
o aplicarla inmediatamente a un argumento, es decir. <exp>(5)
.
Tengo curiosidad de qué idiomas le permiten escribir literales de función que son recursivo. El artículo "anonymous recursion" de Wikipedia no da ningún ejemplo de programación.
Vamos a usar la función factorial recursiva como el ejemplo.
Éstos son los que conozco:
Javascript/ECMAScript puede hacerlo con
callee
:function(n){if (n<2) {return 1;} else {return n * arguments.callee(n-1);}}
es fácil en idiomas con
letrec
, por ejemplo, Haskell (que lo llamalet
) :let fac x = if x<2 then 1 else fac (x-1) * x in fac
y no son equivalentes en Lisp y Scheme. Tenga en cuenta que el enlace de
fac
es local a la expresión, por lo que la expresión completa es, de hecho, una función anónima.
¿Hay algún otro?
anónimos son diferentes de las funciones dinámicas, la diferencia es en su alcance, una función anónima o 'función literal' es un verdadero objeto tal como un número entero 3. Por ejemplo, PHP antes de 5.3 tenía funciones dinámicas, bu No es anónimo. (Consulte la publicación a continuación) – Zorf