Почему список аргументов указан как ArraySeq?

Рассмотрим следующую функцию:

user> (defn first-args [& args]
            (args 0))
#'user/first-args
user> (first-args 1 2 3) ;=> clojure.lang.ArraySeq cannot be cast to clojure.lang.IFn

Почему список аргументов является clojure .lang.ArraySeq , а не что-то более распространенное, например PersistentVector ? Или почему ArraySeq не реализует IFn ? Причины производительности? Похоже, вам нужно немного знать базовую реализацию вещей, работая с Clojure. Не стесняйтесь просветить меня.

PS: этот вопрос не о том, "это идиоматика или нет?" Просто спрашиваю, почему это так.

18
задан Michiel Borkent 20 November 2011 в 22:53
поделиться