如今,似乎有许多主流语言支持function literals。它们也称为anonymous functions,但是我不在乎它们是否有名称。重要的是,函数字面量是一个表达式,它产生的功能在其他地方尚未定义,因此例如在C中,&printf
不计算在内。
编辑添加:如果您具有真正的函数文字表达式<exp>
,则应该能够将其传递给函数f(<exp>)
或立即将其应用于参数,即。 <exp>(5)
。
我很好奇哪种语言可以让您编写递归的函数文字。维基百科的“ anonymous recursion”文章没有提供任何编程示例。
让我们以递归阶乘函数为例。
这是我所知道的:
JavaScript / ECMAScript可以使用callee
来实现:
function(n){if (n<2) {return 1;} else {return n * arguments.callee(n-1);}}
在使用
letrec
的语言中很容易,例如Haskell(将其称为let
):let fac x = if x<2 then 1 else fac (x-1) * x in fac
Lisp和Scheme中有等效项。请注意,
fac
的绑定是表达式的局部内容,因此整个表达式实际上是一个匿名函数。还有其他吗?
最佳答案
大多数语言都通过使用Y combinator来支持它。这是Python中的一个示例(来自cookbook):
# Define Y combinator...come on Gudio, put it in functools!
Y = lambda g: (lambda f: g(lambda arg: f(f)(arg))) (lambda f: g(lambda arg: f(f)(arg)))
# Define anonymous recursive factorial function
fac = Y(lambda f: lambda n: (1 if n<2 else n*f(n-1)))
assert fac(7) == 5040
关于recursion - 哪些语言支持*递归*函数文字/匿名函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/156369/