Подтвердить что ты не робот

Почему concat на векторах оценивается в списке?

Вызов concat на векторах возвращает список. Будучи полным noob, я ожидал бы, что результатом будет также вектор. Почему преобразование в список?

Пример:

user=> (concat [1 2] [3 4] [5 6])
(1 2 3 4 5 6)
; Why not: [1 2 3 4 5 6] ?
4b9b3361

Ответ 1

concat возвращает ленивую последовательность.

user=> (doc concat)
-------------------------
clojure.core/concat
([] [x] [x y] [x y & zs])
  Returns a lazy seq representing the concatenation of the elements in the supplied colls.

вы можете преобразовать его обратно в вектор с помощью:

user=> (into [] (concat [1 2] [3 4] [5 6]))
[1 2 3 4 5 6]

в использует переходные процессы, поэтому он довольно быстро об этом.