我正在尝试创建一个包含多个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中这样做?
答案 0 :(得分:2)
您的代码不正确。它将进入无限循环,因为数字是偶数或奇数,因此在每次迭代recur
将始终被调用。而且,你究竟想做什么并不明显;如果你解释你的问题,就有可能给出更明确的答案。
您必须首先定义退出条件 - 您希望此函数返回什么?然后,您必须以这样的方式构造循环,使其在满足退出条件时不会调用recur
。在这种情况下,函数最终会返回一些东西。
使用loop
,{{1}等标准函数,您甚至可以在不使用recur
和map
等低级原语的情况下完成所需操作。 }和filter
(或reduce
宏)。