Документация для conj
(от clojure.org ):
Призывание [ойн]. Возвращает новую коллекцию с хз
«Добавил». (продолжение) возвращает (элемент). «Дополнение» может
происходят в разных «местах» в зависимости от типа бетона.
Более эффективно «добавлять» элементы в конец вектора, в то время как более эффективно это делать в начале списков. conj
использует все, что наиболее эффективно для структуры данных, которую вы ей предоставляете.
В приведенных вами примерах '(1 2 3)
и (seq [1 2 3])
оба реализуют ISeq
(см. Документацию для seq?
), а [1 2 3]
- нет.
Clojure conj
в конечном счете вызывает метод cons
(не путать с функцией cons
- этот метод является внутренним кодом clojure) для базовой структуры данных; для векторов (PersistentVector
) cons
добавляет элементы в конец, тогда как для списков они добавляются вперед (метод cons
для PersistentList
s возвращает новый список с новым элементом в качестве заголовка, и существующий список как его хвост).