Я пытаюсь объединить 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
неприемлемым для больших входов?