我有一个非常大的懒惰序列,我想把它转换成一个集合.我知道序列中不同元素的数量很少,所以我很容易将该集合放入内存中.但是,我可能无法将整个懒惰的seq放入内存中.我想做(into #{} my-lazy-seq),但我想到,根据into实现的方式,这可能会立即将整个seq拉入内存.
它会在操作时into保持序列的头部吗?
我没有看到任何增加使用的运行(需要一分钟左右)
user=> (into #{} (take 1e8 (cycle [:foo :bar])))
#{:bar :foo}
Run Code Online (Sandbox Code Playgroud)
更精确的证明是检查源的into,而我们看到它只是一个花哨的电话reduce:
(defn into
([to from]
;...
(reduce conj to from)))
Run Code Online (Sandbox Code Playgroud)
如果reduce坚持到头部,那么into.但我不认为reduce那样做.