2
我正在玩懶惰列表,似乎無法弄清楚這一點。 我認爲我可以通過將它作爲一個大的遞歸函數來解決我的問題,這個函數可以完成所有必要的工作,但是我想編寫一個簡單的函數。如何扁平化和懶洋洋地連接列表清單
我會嘗試寫一個簡單的例子,應該翻譯成我的問題很容易:
(defn numbers
([] (numbers 1))
([n] (cons n (lazy-seq (numbers (inc n))))))
(defn repeat-n [n]
(take n (repeat n)))
所以,我們有兩個功能。一個返回一個懶惰的數字序列。另一個返回它的數字參數n次(希望它也是懶惰的;如果不是這樣,編寫一個會很容易)。
我想將repeat-n映射到數字,以便返回懶惰的結果序列。我用lazy-seq
,lazy-cat
,concat
和遞歸函數玩了一下,但是我仍然遇到了問題。
函數應該是這樣的
(lazy-concat-map [f items] ...)
和(希望)呼叫
的結果(take 11 (lazy-concat-map repeat-n numbers))
將
12233344445
任何想法?
注意'for'可以幫助擺脫'適用concat':'(對於[X(範圍)N(重複XX)] n)的' 。 – kotarak