0

我正在尝试制作一个包含多个 when 的 continue 循环。我目前拥有的是这样的:

(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中做到这一点?

4

1 回答 1

2

您的代码不正确。它将进入无限循环,因为一个数字要么是偶数要么是奇数,所以每次迭代recur都会被调用。此外,您到底想做什么也不清楚。如果你解释你的问题,就有可能给出更明确的答案。

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

loop也很有可能你可以做你想做的事,甚至不需要使用像和这样的低级原语,使用像和(或宏)这样的recur标准函数。mapfilterreducefor

于 2012-10-13T19:36:16.570 回答