Отвечая на еще один вопрос, я наткнулся на то, чего не ожидал с Clojure переменной arity function args:
user=> (defn wtf [& more] (println (type more)) :ok)
#'user/wtf
;; 1)
user=> (wtf 1 2 3 4)
clojure.lang.ArraySeq
:ok
;; 2)
user=> (let [x (wtf 1 2 3 4)] x)
clojure.lang.ArraySeq
:ok
;; 3)
user=> (def x (wtf 1 2 3 4))
clojure.lang.PersistentVector$ChunkedSeq
#'user/x
user=> x
:ok
Почему тип ArraySeq
в 1) и 2), но PersistentVector$ChunkedSeq
в 3)?