2015-07-12 80 views
2

有没有解构循环中的recur绑定的方法? 因此,举例来说,如果我想让y保持不变在Clojure中的循环解构

(loop [x 1 y 1] (if (< x 5) (recur (inc x) _) (println "result:" x y)) 

我知道这是不可能的,但我怎么能得到这样_类似的事情在连续解构为recur

+4

如果你想y以留uncahnged,你为什么不只是不停地跳出循环/复发吗? (let [y 1](loop [x 1](if ... –

+0

)我将在其他条件下使用它在其他条件下使用'cond'而不是'if' – amirteymuri

+2

y仍然可用于使用cond ot无论你想从let中定义什么,recur就像调用函数一样,你也不能调用(+ 3 _)。 –

回答

2

假设y从来没有loop内改变,你可以只是包装一切的let结合的值y,甚至把你的loop在接收y作为自变量的函数。

let

(let [y 1] 
    (loop [x 1] 
    (if (< x 5) 
     (recur (inc x)) 
     (println "result:" x y))) 

defn

(defn loop-with [y] 
    (loop [x 1] 
    (if (< x 5) 
     (recur (inc x)) 
     (println "result:" x y)))