0

私は例とドキュメントを見てきました。なぜ私が得ているのか理解できません

loop requires an even number of forms in binding vectorエラー。

問題はループと使用法指標の初期化にあると思います。何が間違っているのか理解できません。

(def usage-vec-len 13)

(defn ret-usage-indicies
"Takes a billed water consumption amount, and returns a vector of the ranges."
[reading]
(let [usage-indicies [0 0 0 0 0 0 0 0 0 0 0 0 0] curr-idx (- usage-vec-len 1)]
 (loop [curr-reading reading ui usage-indicies curr-idx]
.
.
.
 (if (= remaining-reading 0)
 ui
 (recur remaining-reading (assoc ui curr-idx curr-reading) (dec curr-idx)))))))
4

1 に答える 1

5

フォームはloopフォームと同じように見える必要がありますlet。わかりやすくするために、コンマの空白を追加できます。

(loop [symbol1 init1, symbol2 init2, ...] body-of-expressions)

あなたが望むかもしれないように見えます

(loop [curr-reading reading, ui usage-indicies, curr-idx curr-idx] ...)

ここで、は式からcurr-index初期化(リバウンド)されます。curr-indexlet

より良いのは、フォームで行っている初期化をフォーム自体に移動することletですloop。また、のように見えるusage-vec-lenのでcount、ループバインディングでも処理できる場合usage-indicesは、グローバルで指定する必要はありません。def

(loop [curr-reading reading
       ui [0 0 0 0 0 0 0 0 0 0 0 0 0]
       curr-idx (dec (count ui))] 
   body-of-expressions)
于 2013-03-04T20:36:15.360 に答える