Clojure的'进入'是否能保持领先?

Ord*_*Ord 3 clojure seq

我有一个非常大的懒惰序列,我想把它转换成一个集合.我知道序列中不同元素的数量很少,所以我很容易将该集合放入内存中.但是,我可能无法将整个懒惰的seq放入内存中.我想做(into #{} my-lazy-seq),但我想到,根据into实现的方式,这可能会立即将整个seq拉入内存.

它会在操作时into保持序列的头部吗?

unp*_*680 6

我没有看到任何增加使用的运行(需要一分钟左右)

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那样做.