このサンプルプログラムを動作させようとしています
(defn foo
([x] (foo x []))
([x current]
(when (> x 0)
(recur (dec x) (conj current x)))))
この関数 (foo 5) を呼び出すと、[1 2 3 4 5] が返されるはずですが、nil しか返されません。私は何を間違っていますか?
ありがとう、ムルタザ
このサンプルプログラムを動作させようとしています
(defn foo
([x] (foo x []))
([x current]
(when (> x 0)
(recur (dec x) (conj current x)))))
この関数 (foo 5) を呼び出すと、[1 2 3 4 5] が返されるはずですが、nil しか返されません。私は何を間違っていますか?
ありがとう、ムルタザ
再帰には戻り式がありません。つまり、thenwhenが false の場合、再帰は終了し、nil が返されます。次のように使用してこれを修正できますif。
(defn foo
([x] (foo x []))
([x current]
(if (> x 0)
(recur (dec x) (conj current x))
current)))
ベクトルを戻り値として使用している[5 4 3 2 1]ため、これが返され、ベクトルではベクトルの末尾にアイテムが追加されます。ベクトルを逆にするか、使用する代わりにリストを使用することができます(foo 5)conj(foo x [])(foo x '())
以下のコードは機能します。最終値を返していませんでした。
(defn foo
([x] (foo x []))
([x current]
(if (> x 0)
(recur (dec x) (conj current x))
current)))
(if (= x 0)元のプログラムをの代わりに使用するように修正しましたが(when (> x 0)、これは を返します[1 2 3 4 5]。
(defn foo
([x] (foo x []))
([x current]
(if (= x 0)
(apply vector (sort < current))
(recur (dec x) (conj current x)))))