私は現在、エラーが発生しているコードをいくつか持っています。なぜなら、再発は末尾にしかないからです。ここでの機能があります:私は言うことができれば、私はこの問題を解決するために考えることができますclojure:末尾にrecurを配置するcondでバインディングを使用しますか?
(defmethod transposer
Long [scale degree]
(loop [new-scale scale count degree]
(cond
(zero? count) new-scale
(< count 0) (recur (step (reverse new-scale)) (inc count)))
:else (recur (step new-scale) (dec count))))
一つの方法は、結合条件付きである: カウントがゼロより小さいとき、「それ以外に設定し、「株式会社」へのオペレータをカウント設定しましたdec "にして、最後に再発する。
これで問題が解決します。しかし、私はクローゼットでこれをどうやって行うのか、あるいはそれが可能なのかどうかは分かりません。 1つの反復だけを使用するようにコードを修正する最良の方法は何ですか?
編集:私は、ここで学んだことのカップル:
1)はループ文はありません場合は、バックDEFNに再発する「再発」。私が読んだ本では、繰り返し使用のすべての例はループ/再帰を使用するので、ループを持つ必要があると考えました。そうではありません、私のループステートメントは不必要です。
2)かっこを誤って入力すると、混乱するエラーが発生しました。両方のcond文が互いに排他的であるため、両方のcond文が末尾にあるとは思われません。私はparen完了チェッカーにもう少し注意を払う必要がありました。
3)条件付きバインディングを実行したい場合は、標準の「let」ステートメントを使用して、そこに条件付きロジックを含めることができます。 Javaの背景から来て、私は時々、この領域で許容される柔軟性を忘れる。
あなたのコードを理解できません。 'loop'の中の' recur'はループを呼び出しますが、あなたのargsリストは一致しません。何のために '' do? –
最後の行にあるはずの2行目から最後の行に余分な括弧もあります。 – Jeremy
申し訳ありませんが、私がやっていたデバッグから "do"が残っていました。私はそれを削除しました。 –