2012-10-20 31 views
3

下面的解释是assoc代码:assoc命令Clojure中:的内部

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

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

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

回答

4
  1. clojure.lang.RT是主要的Clojure运行时类。它拥有构成语言核心的大部分方法。

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

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

Clojure的缔数据结构都是O(n日志n)的在空间(因为它们是树)。

+0

我想了解'assoc'如何在地图上工作,当它必须修改现有的条目?你知道我在哪里可以找到材料吗? – viebel

+0

http://blip.tv/clojure/clojure-data-structures-part-1-714056 –

+0

和这一个http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey(具体来说20分钟进入它) –