私はClojureに慣れようとしているので、いくつかの基本的なアルゴリズムとデータ構造を実装し始めました。私は現在、バイナリ検索ツリーの実装に問題があります。ここに私のコードは次のとおりです。clojureでバイナリ検索ツリーを実装する
(exercise.new-ns/add-bst 5 nil)
しかし、私は
NullPointerException
を得るが、私は、なぜ私は理解していない:
(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
に行をランダムな番号を追加しようとしていましたこの例外が発生します。私のコードに何か問題がありますか?私は
....あなたは値がnilであるとき、構造体、マップを混乱さあなたの関数パラメータに「BST」を再使用しているので、それは疑う
少なくともClojure 1.2を使用している場合は、 'defstruct'の代わりに' deftype'を使用します。 'deftype'を使うと、' add-bst'と同様の関数をより良くするプロトコルを使うこともできます。なぜなら 'nil'に' extend-type'を使うことができるからです。 BSTノードでした。 – Brian