在clojure中的关联:对内部的解释

时间:2012-10-20 19:30:51

标签: clojure immutability

以下是assoc的代码:

(def assoc
 (fn assoc
   ([map key val] (. clojure.lang.RT (assoc map key val)))))
  1. clojure.lang.RT是什么意思?

  2. 在矢量/地图上调用assoc的复杂性是什么?

  3. 访问由assoc创建的结构的复杂性是什么?

1 个答案:

答案 0 :(得分:4)

  1. clojure.lang.RT是主要的Clojure RunTime类。它有大多数方法构成语言的核心。

  2. 对于包括向量和映射的所有关联数据结构,
  3. assoc为O(1)。 array-map从前几个项开始线性,然后将自己提升为hash-map,因此它也是O(1)。当然,如果需要,您可以使用非O(1)的东西实现关联接口。

  4. 从技术上讲,通过在另一个地图上调用assoc创建的地图或矢量中的项目的访问时间是O(log32 N)。因为这些数据结构的大小为~2 ^ 32项的上限,所以最大树深度为6,实际上是恒定时间

  5. Clojure的关联数据结构在空间中都是O(nLog n)(因为它们是树)。