听起来你已经知道懒惰序列不是
counted?
.
然而,在你的例子中
doall
那个
结果作为
LazySeq
.看看这个REPL输出:
user=> (class (doall (map identity (range 100))))
clojure.lang.LazySeq
into
进入
速度较慢,但对我来说似乎仍然可以接受。
尽管如此,您也许可以通过调用
vec
根据您的结果,而不是
user=> (time (counted? (into '() (map identity (range 100)))))
"Elapsed time: 0.287542 msecs"
true
user=> (time (counted? (vec (map identity (range 100)))))
"Elapsed time: 0.169342 msecs"
true
更新/更正:
评论人士恭敬地指出:
1)
time
2)
(vec x)
(list x)
;
(列表x)
无论x的内容是什么,都是一个恒定的时间操作。
道尔
返回其输入作为其输出;如果你传入一个LazySeq,你会得到一个LazySeq;如果你传入一个map,你会得到一个map,等等。