3

recurループ内のバインディングを分解する方法はありますか? たとえば、y変更しないままにしたい場合

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

私はこれが不可能であることを知っていますが、どうすれば の_順次破壊のような同様のことを得ることができrecurますか?

4

1 に答える 1

3

y内で変化しないと仮定すると、値を にバインドする でloopすべてをラップするか、引数として受け取る関数に配置することさえできます。letyloopy

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)))
于 2015-07-12T22:38:55.447 に答える