Я пытаюсь познакомиться с 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
в РЕПЛ, линия так:
(exercise.new-ns/add-bst 5 nil)
Но я получаю NullPointerException
, но я не понимаю, почему я получая это исключение. Что-то не так с моим кодом?
Если вы используете, по крайней мере, Clojure 1.2, я бы посмотрел на использование 'deftype' вместо' defstruct'. Если вы используете 'deftype', вы также можете использовать протоколы, которые сделают' add-bst' и подобные функции более приятными, потому что вы можете использовать 'extend-type' на' nil', эффективно позволяя вашему коду обрабатывать 'nil', как если бы он были узлом BST. – Brian