Я пытаюсь объединить Seq Seqs.
Я могу сделать это с помощью apply concat.
user=> (count (apply concat (repeat 3000 (repeat 3000 true))))
9000000
Однако из моих ограниченных знаний я бы предположил, что использование apply заставляет ленивый Seq быть реализованным, и это не кажется правильным для очень больших входов. Я бы предпочел сделать это лениво, если смогу.
Поэтому я подумал, что использование reduce будет выполнять эту работу.
user=> (count (reduce concat (repeat 3000 (repeat 3000 true))))
Но это приводит к
StackOverflowError clojure.lang.RT.seq (RT.java:484)
Я удивлен, потому что я бы подумал, что семантика reduce будет означать, что это был вызов хвоста рекурсивным.
Два вопроса:
- Лучший способ сделать это
apply? - Является ли
reduceнеприемлемым для больших входов?