【发布时间】:2011-02-07 16:55:14
【问题描述】:
我正在尝试熟悉 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))
我试图将随机数添加到 REPL 中的 BST 中,如下所示:
(exercise.new-ns/add-bst 5 nil)
但我收到了NullPointerException,但我不明白为什么会收到此异常。我的代码有问题吗?
【问题讨论】:
-
如果您至少使用 Clojure 1.2,我会考虑使用
deftype而不是defstruct。如果您使用deftype,您还可以使用使add-bst和类似功能更好的协议,因为您可以在nil上使用extend-type,有效地允许您的代码将nil视为BST 节点.
标签: clojure