阶乘迭代非法参数-clojure (defn fac[n] (def结果1) (循环[i n c 1] (如果第一眼看到(

阶乘迭代非法参数-clojure (defn fac[n] (def结果1) (循环[i n c 1] (如果第一眼看到(,clojure,Clojure,) 不要在defn内使用def REPL将打印计算函数的结果。请使用它 这样我们就可以 (defn fac [n] (def result 1) (loop [i n c 1] (if (<= c 5) result (recur (* c i) (inc c)) ) ) (println result) ) (fac 5) …

  • 不要在
    defn
    内使用
    def
  • REPL将打印计算函数的结果。请使用它
这样我们就可以

    (defn fac [n]
      (def result 1)
      (loop [i n c 1]
        (if (<= c 5)
          result
          (recur (* c i) (inc c))
          )
        )
      (println result)
      )

    (fac 5)
…有效的方法是:

(defn fac [n]
  (loop [i 1, c 1]
    (if (> c n)
      i
      (recur (* c i) (inc c)))))


编辑以更正一次性错误并改进解释。

您确定您在实际运行时将代码粘贴在这里吗?它对我有效。它打印
1
@NathanDavis我正在尝试查找120Ok,也许我误读了您的问题。但是
java.lang.IllegalArgumentException:循环如何需要一个向量作为其绑定g
开始游戏?谢谢,但我无法打印循环外的I
(defn fac [n]
  (loop [i 1, c 1]
    (if (> c n)
      i
      (recur (* c i) (inc c)))))
(fac 5)
=> 120