Я знаю, что cons
возвращает seq, а conj
возвращает коллекцию. Я также знаю, что conj
"добавляет" элемент к оптимальному концу коллекции, а cons
всегда "добавляет" элемент вперед. Этот пример иллюстрирует обе эти точки:
user=> (conj [1 2 3] 4) //returns a collection
[1 2 3 4]
user=> (cons 4 [1 2 3]) //returns a seq
(4 1 2 3)
Для векторов, отображений и множеств эти различия имеют смысл для меня. Однако для списков они кажутся идентичными.
user=> (conj (list 3 2 1) 4) //returns a list
(4 3 2 1)
user=> (cons 4 (list 3 2 1)) //returns a seq
(4 3 2 1)
Есть ли примеры с использованием списков, где conj
vs. cons
демонстрируют разные типы поведения, или они действительно взаимозаменяемы? С другой стороны, есть ли пример, когда список и seq нельзя использовать эквивалентно?