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

时间:2015-08-04 05:40:16

标签: clojure seq

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





进入会在操作时保持序列的头部吗?




2 个答案:

答案 0 :(得分:6)

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

user=> (into #{} (take 1e8 (cycle [:foo :bar])))
#{:bar :foo}

更精确的证据是检查into reduce,我们认为这只是对(defn into ([to from] ;... (reduce conj to from))) 的一种奇特的看法:

reduce

如果into保留在头部,那么reduce会这样做。但我不认为 mVideoView.suspend(); mVideoView.stopPlayback(); mVideoView = null; 会这样做。

答案 1 :(得分:3)

补充@ progo的答案,你可以随时使用

(source into)

检查repl中into的源代码。这样可以节省一些时间查看加长的core.clj中的行。