我的Clojure循环中的尾部位置在哪里?

alt*_*alt 1 tail-recursion clojure

Clojure说我无法recur从非尾部位置打电话.

这不是尾巴的位置吗?

那么我的循环中的尾部位置什么?

(loop [i 20]
    (for [x (range 1 21)]
      (if (zero? (rem i x))
        i
        (recur (+ i 1)))))
Run Code Online (Sandbox Code Playgroud)

joh*_*ers 5

for不做你认为它做的事情; 它不是一个必要的循环.它是列表推导或序列生成器.因此,最后没有返回或迭代调用,所以你不能放在recur那里.

看起来你可能根本不需要looprecur在这个表达式中; 这for就是构建序列所需要的一切,但我不清楚你想要构建什么序列.