循环中的参数多次

时间:2012-10-13 17:09:07

标签: clojure

我正在尝试创建一个包含多个when的循环。我现在拥有的是:

(defn test [n]
(loop [x n]
    (when (> x 1)
        (println x))

    (when (even? x)
        (recur (- x 1))
        (println x))
    (when (odd? x)
        (recur (+ x 2))
        (println x))
)

有没有办法在clojure中这样做?

1 个答案:

答案 0 :(得分:2)

您的代码不正确。它将进入无限循环,因为数字是偶数或奇数,因此在每次迭代recur将始终被调用。而且,你究竟想做什么并不明显;如果你解释你的问题,就有可能给出更明确的答案。

您必须首先定义退出条件 - 您希望此函数返回什么?然后,您必须以这样的方式构造循环,使其在满足退出条件时不会调用recur。在这种情况下,函数最终会返回一些东西。

使用loop,{{1}等标准函数,您甚至可以在不使用recurmap等低级原语的情况下完成所需操作。 }和filter(或reduce宏)。