相关疑难解决方法(0)

Clojure中的结构共享

我不清楚Clojure中的结构共享.下面是一个取自Clojure的欢乐的函数xconj(Great book BTW).

;;Building a naive binary search tree using recursion
(defn xconj [t v]
      (cond 
          (nil? t) {:val v :L nil :R nil}
          (< v (:val t)) {:val (:val t) :L (xconj (:L t) v) :R (:R t)}
          :else {:val (:val t) :L (:L t) :R (xconj (:R t) v)}))
Run Code Online (Sandbox Code Playgroud)

如果定义了两个树t1和t2,如下所示.

(def t1 (xconj (xconj (xconj nil 5) 3) 2))
(def t2 (xconj t1 7))
Run Code Online (Sandbox Code Playgroud)

很明显,左子树由t1和t2共享

user> (identical? (:L t1) (:L t2))
true
Run Code Online (Sandbox Code Playgroud)

但是如果要创建一个新树t3,通过在t1的左子树中插入一个新值'1',如下所示:

(def t3 (xconj t1 1)) …
Run Code Online (Sandbox Code Playgroud)

clojure

6
推荐指数
1
解决办法
1955
查看次数

标签 统计

clojure ×1