【发布时间】:2015-02-14 02:37:14
【问题描述】:
我是 Clojure 的新手,为了练习,我正在尝试对半随机数应用一个简单的算法。
几天前,我在 clojure 的文档中阅读了有关循环的内容,以及它们如何使用 recur,因此我尝试使用以下代码行编写循环:
(def numbers_semi_random
(fn []
(loop[Xn 4 count 0]
(while (and (not (= Xn m)) (< count m))
(println (mod (+ (* 5.0 Xn) 7.0) m))
(recur (mod (+ (* 5.0 Xn) 7.0) m) (inc count))
))))
但是当我执行代码时,会显示这个错误
CompilerException java.lang.UnsupportedOperationException: Can only recur from tail position, compiling
发生了什么事? recur不在函数尾部?
【问题讨论】:
-
仅供参考,您可以写
(defn numbers_semi_random [] ...)而不是(def numbers_semi_random (fn [] ...))。 -
是的,但是会抛出同样的错误。当我在文档中的 recur 部分看到时,我尝试练习的那部分代码。谢谢
标签: clojure functional-programming clojure-repl