我想用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