Clojure中的循环解构

3
有没有一种方法可以在循环中解构recur绑定?例如,如果我想让y保持不变。
(loop [x 1 y 1] (if (< x 5) (recur (inc x) _ ) (println "result:" x y))

我知道这是不可能的,但是我怎么才能在recur的连续解构中获得类似于_的东西呢?


6
如果你想让y保持不变,为什么不把它从循环/递归中剔除?(让[y 1] (loop [x 1] (if... - Assen Kolov
我将在循环的其他条件下使用cond而不是if,并将其用于循环的其他部分。 - user4813927
2
y仍然可以在let的定义中用于cond或者任何你想要的地方。recur就像调用函数一样,你也不能调用(+ 3 _)。 - Assen Kolov
1个回答

3
假设在循环中 y 永远不会改变,你可以使用 let 将所有内容包装在一起,将一个值绑定到 y 上。或者,您甚至可以将 loop 放在一个函数中,并将 y 作为参数传递给它。
(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)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接