我想用clojure創建一個包含另一個lazy-seq的lazy-seq。clojure:創建一個包含另一個lazy-seq的lazy-seq
的數據結構,我AREADY已經是地圖的懶惰序列,它看起來像這樣:
({:a 1 :b 1})
現在我想提出的是懶惰-SEQ成另一個,這樣的結果將是一個懶序列的地圖lazy-seq:
(({:a 1 :b 1}))
有誰知道如何做到這一點?任何幫助,將不勝感激
問候,
我想用clojure創建一個包含另一個lazy-seq的lazy-seq。clojure:創建一個包含另一個lazy-seq的lazy-seq
的數據結構,我AREADY已經是地圖的懶惰序列,它看起來像這樣:
({:a 1 :b 1})
現在我想提出的是懶惰-SEQ成另一個,這樣的結果將是一個懶序列的地圖lazy-seq:
(({:a 1 :b 1}))
有誰知道如何做到這一點?任何幫助,將不勝感激
問候,
下面是創建包含地圖列表清單的例子:
=> (list (list {:a 1 :b 1}))
(({:a 1, :b 1}))
這不是懶惰,但你可以使用lazy-seq
macro:
=> (lazy-seq (list (lazy-seq (list {:a 1 :b 1}))))
或->
宏相同的代碼:
=> (-> {:a 1 :b 1} list lazy-seq list lazy-seq)
其實,如果你會用向量這裏替換名單,你會得到相同的結果:
=> (lazy-seq [(lazy-seq [{:a 1 :b 1}])])
(({:a 1, :b 1}))
我米不知道你想要做什麼,你爲什麼要這兩個列表是懶惰的。因此,如果您需要進一步幫助,請提供更好的解釋
Thx Leonid。你說得對,沒有必要讓這兩個列表都懶惰。這是我的推理錯誤;-) – Horace
一般,沒有什麼特別的具有含許多懶惰序列的一個懶惰-seq的,所以我不明白它到底是什麼,你真的很後。
你總是可以做
(map list '({:a 1 :b 1})) ;; gives (({:a 1, :b 1}))
我們甚至可以驗證它保持懶惰:
(def a
(concat
(take 5 (repeat {:a 1 :b 2}))
(lazy-seq
(throw (Exception. "too eager")))))
(println (take 5 (map list a))) ;; works fine
(println (take 6 (map list a))) ;; throws an exception
您可以添加幾個步驟到您的最終預期輸出,我不能完全理解您的要求意義 – tangrammer
你好tangrammer。 Thx爲您的答覆。我其實不想輸出。重點是還有另外一個函數,把一個seq映射作爲參數,這就是說(({:a 1:b 1}))。 – Horace