我想使用clojure创建一个包含另一个lazy-seq的lazy-seq。
我所拥有的数据结构是一个lazy-seq的map,它看起来像这样:
({:a 1 :b 1})
现在我想把那个lazy-seq放到另一个中,这样结果将是lazy-seq的lazy-seq:
(({:a 1 :b 1}))
有谁知道怎么做?任何帮助将不胜感激
此致
答案 0 :(得分:1)
以下是创建包含地图列表的列表的示例:
=> (list (list {:a 1 :b 1}))
(({:a 1, :b 1}))
这不是懒惰,但你可以使两个列表与lazy-seq
宏一起变得懒惰:
=> (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}))
我不确定你要做什么,为什么你想要两个列表都是懒惰的。因此,如果您需要进一步的帮助,请提供更好的解释。
答案 1 :(得分:0)
一般来说,懒惰seq包含许多lazy-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