我正在尝试连接一系列Seqs.
我可以做到apply concat.
user=> (count (apply concat (repeat 3000 (repeat 3000 true))))
9000000
Run Code Online (Sandbox Code Playgroud)
但是,根据我有限的知识,我会假设使用apply力量来实现懒惰的Seq,这对于非常大的输入来说似乎并不合适.如果可以的话,我宁愿懒洋洋地这样做.
所以我认为使用reduce就可以完成这项工作.
user=> (count (reduce concat (repeat 3000 (repeat 3000 true))))
Run Code Online (Sandbox Code Playgroud)
但这导致了
StackOverflowError clojure.lang.RT.seq (RT.java:484)
Run Code Online (Sandbox Code Playgroud)
我很惊讶,因为我会认为语义reduce意味着它是尾调用的递归.
两个问题:
apply是最好的方法吗?reduce一般不适合大投入?