Многие базовые функции Clojure возвращают ленивые последовательности, даже если в них передаются векторы. Например, если бы у меня был вектор чисел и я хотел бы отфильтровать их на основе некоторого предиката , но получить обратно другой вектор , мне пришлось бы сделать что-то вроде этого:
(into [] (filter my-pred my-vec))
Или:
(vec (filter my-pred my-vec))
Хотя я не уверен, есть ли значимая разница между ними.
Эта операция дорогая или вы получаете ее бесплатно, как при конвертации в / из переходного процесса?
Я понимаю, что seq является ленивым, поэтому на самом деле ничего не будет вычислено, пока вы не вставите его в выходной вектор, но есть ли накладные расходы на преобразование из seq и конкретной коллекции? Можно ли его охарактеризовать в терминах «большого О», или «Большое О» здесь не имеет смысла? А как насчет другого пути при преобразовании из вектора в последовательность?