這裏有一個初學者的問題:在Clojure中是否有一種方法來懶散地連接任意數量的序列?我知道有lazy-cat
宏,但我不能想到它的正確應用程序的任意數量的序列。Clojure中序列的懶串聯
我的用例是通過paginated(offseted/limited)請求延遲加載API中的數據。下面通過request-fn
執行的每個請求檢索100個結果:
(map request-fn (iterate (partial + 100) 0))
當沒有更多結果,request-fn
返回一個空序列。這是當我停止迭代:
(take-while seq (map request-fn (iterate (partial + 100) 0)))
例如,API可能返回最多500個結果,可以嘲笑爲:
(defn request-fn [offset] (when (< offset 500) (list offset)))
如果我想連接的結果,我可以使用(apply concat results)
但熱切評估結果序列:
(apply concat (take-while seq (map request-fn (iterate (partial + 100) 0))))
有沒有辦法如何懶洋洋地連接結果序列,即使用lazy-cat
或其他什麼東西?
['lazy-cat' *宏*](http://grimoire.arrdem.com/1.6。 0/clojure.core/lazy-cat /)只根據需要評估每個參數。 – Thumbnail 2014-10-27 19:04:23
是的,但是你如何將它應用於一系列參數? – 2014-10-27 19:06:54
你真的需要連接結果嗎,還是隻是想懶惰地消耗它們? – 2014-10-27 19:12:01