因子迭代非法论证 - clojure

时间:2017-10-02 23:58:03

标签: clojure

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

    (fac 5)

错误:线程&#34; main&#34;中的异常java.lang.IllegalArgumentException:loop需要一个向量来绑定它。

我正在尝试编写一个评估数字阶乘的函数。我的错误在哪里?它给了我一个答案

1 个答案:

答案 0 :(得分:1)

乍一看:

  • 请勿在{{1​​}}内使用def
  • REPL将打印评估功能的结果。使用它。

这让我们

defn

...没有编译,因为(defn fac [n] (loop [i n c 1] (if (<= c 5) result (recur (* c i) (inc c))))) 是浮动的。

需要进行一些更正:

  • 返回result,而不是i
  • result开始i,而不是1
  • 围绕:n代替>
  • 进行测试

我们最终

<=

......有效:

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

编辑以纠正一次性错误并改进说明。