这是Clojure对vector
的定义:
(defn vector
"Creates a new vector containing the args."
{:added "1.0"
:static true}
([] [])
([a] [a])
([a b] [a b])
([a b c] [a b c])
([a b c d] [a b c d])
([a b c d & args]
(. clojure.lang.LazilyPersistentVector (create (cons a (cons b (cons c (cons d args))))))))
为什么会有这么多情况?或者说,如果有这么多情况,为什么没有更多的情况呢?
我猜这是在实现效率和概率之间寻求平衡,但我不太明白这样做如何更有效率。