Clojure中的非尾递归匿名函数

pau*_*doo 24 recursion lambda clojure

如何在Clojure中创建递归匿名函数,而不是尾递归?

以下显然不起作用,recur仅用于尾递归函数.我也不愿意拖入y-combinator ..

((fn [n] (if (= 1 n) 1 (* n (recur (dec n))))) 5)
Run Code Online (Sandbox Code Playgroud)

ama*_*loy 44

可以通过fn在arglist和arglist 之间指定函数来为函数指定引用它们的名称:

user> ((fn ! [n] (if (= 1 n) 1 (* n (! (dec n))))) 5)
120
Run Code Online (Sandbox Code Playgroud)

  • yay命名匿名函数!+1 (10认同)
  • 他定义的函数是阶乘函数.我本可以称之为"事实",但是数学家称之为"!",我们正在使用一种允许我们称之为相同的语言.当每个人都知道5时,似乎很难写出更长的东西!是120. (4认同)