我想熟悉Clojure,所以我開始實現一些基本的算法和數據結構。我目前在實現二叉搜索樹時遇到了問題。這裏是我的代碼:在clojure中實現一個二叉搜索樹
(defstruct bst :left :right :key)
(defn add-bst [n bst-t]
(cond
(nil? bst-t) (struct-map bst :left nil :right nil :key n)
(< n (:key bst-t)) (struct-map bst :left (add-bst n (:left bst-t))
:right (:right bst-t) :key (:key bst-t))
(> n (:key bst-t)) (struct-map bst :left (:left bst-t)
:right (add-bst n (:right bst-t)) :key (:key bst-t))
true bst-t))
我嘗試添加隨機數到BST
在REPL,行這樣:
(exercise.new-ns/add-bst 5 nil)
但我得到一個NullPointerException
,但我不明白爲什麼我得到這個例外。我的代碼有問題嗎?
如果您至少使用Clojure 1.2,我會考慮使用'deftype'而不是'defstruct'。如果你使用'deftype',你也可以使用協議來使'add-bst'和類似的函數更好,因爲你可以在'nil'上使用'extend-type',這樣可以讓你的代碼看起來像'nil'一樣是BST節點。 – Brian