私は怠惰なリストをいじっていますが、これを理解できないようです。これを、必要なすべてを実行する 1 つの大きな再帰関数として記述することで問題を解決できると思いますが、より単純な関数で構成したいと考えています。
私の問題に簡単に変換できる簡単な例を書いてみます。
(defn numbers
([] (numbers 1))
([n] (cons n (lazy-seq (numbers (inc n))))))
(defn repeat-n [n]
(take n (repeat n)))
したがって、2 つの関数があります。1 つは数字の遅延シーケンスを返します。もう 1 つは、number パラメーターを n 回返します (これも怠惰であることを願っています。そうでない場合は、簡単に記述できるように思えます)。
結果の遅延シーケンスを返すような方法で、repeat-n を数値にマップしたいと思います。lazy-seq
、lazy-cat
、 、および再帰関数を少しいじってみましconcat
たが、まだ問題があります。
関数はこのようなものでなければなりません
(lazy-concat-map [f items] ...)
そして(うまくいけば)呼び出しの結果
(take 11 (lazy-concat-map repeat-n numbers))
だろう
12233344445
何か案は?