Which languages support *recursive* function literals / anonymous functions?
Posted
by Hugh Allen
on Stack Overflow
See other posts from Stack Overflow
or by Hugh Allen
Published on 2008-10-01T05:46:48Z
Indexed on
2010/05/20
1:20 UTC
Read the original article
Hit count: 373
It seems quite a few mainstream languages support function literals these days. They are also called anonymous functions, but I don't care if they have a name. The important thing is that a function literal is an expression which yields a function which hasn't already been defined elsewhere, so for example in C, &printf
doesn't count.
EDIT to add: if you have a genuine function literal expression <exp>
, you should be able to pass it to a function f(<exp>)
or immediately apply it to an argument, ie. <exp>(5)
.
I'm curious which languages let you write function literals which are recursive. Wikipedia's "anonymous recursion" article doesn't give any programming examples.
Let's use the recursive factorial function as the example.
Here are the ones I know:
JavaScript / ECMAScript can do it with
callee
:function(n){if (n<2) {return 1;} else {return n * arguments.callee(n-1);}}
it's easy in languages with
letrec
, eg Haskell (which calls itlet
):let fac x = if x<2 then 1 else fac (x-1) * x in fac
and there are equivalents in Lisp and Scheme. Note that the binding of
fac
is local to the expression, so the whole expression is in fact an anonymous function.
Are there any others?
© Stack Overflow or respective owner