저는 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))
나는 REPL에서
BST
에 임의의 숫자를 추가하려고했다
, 그래서 행 : 여기 내 코드입니다
(exercise.new-ns/add-bst 5 nil)
하지만이 NullPointerException
를 얻을 수 있지만, 내가 왜 이해가 안 돼요 이 예외가 발생했습니다. 내 코드에 문제가 있습니까?
Clojure 1.2 이상을 사용하고 있다면'defstruct' 대신'deftype'을 사용합니다. 'deftype'을 사용하면'add-bst'와 유사한 함수를 더 멋지게 만들 수있는 프로토콜을 사용할 수 있습니다. 왜냐하면'nil'에'extend-type'을 사용할 수 있기 때문에'nil'을 효과적으로 처리 할 수 있습니다 BST 노드였습니다. – Brian