私は今日4Clojureの問題に取り組んできましたが、問題 28で問題が発生し、flatten を実装しました。
私のコードには明確な問題がいくつかあります。
(fn [coll]
((fn flt [coll res]
(if (empty? coll)
res
(if (seq? (first coll))
(flt (into (first coll) (rest coll)) res)
(flt (rest coll) (cons (first coll) res))))) coll (empty coll)))
いくつかの問題について考える方法について、いくつかの指針を使用できます。
結果のリストの順序を変更していないことを確認するにはどうすればよいですか?
cons
どちらも、要素をconj
追加するのが最も効率的な場所(リストの最初、ベクトルの最後など)に要素を追加するため、ジェネリックを操作するときにこれをどのように制御する必要があるのか わかりません順序。異なるタイプのネストされたシーケンスを処理するにはどうすればよいですか? たとえば、 will の入力は
'(1 2 [3 4])
will output([3 4] 2 1)
を入力し、 will の入力は出力します。[1 2 '(3 4)]
(4 3 2 1)
私は「正しい」角度からこれに近づいていますか?これを行うには、アキュムレータで再帰的な内部関数を使用する必要がありますか、それとも明らかな何かが欠けていますか?