2011-02-07 9 views
3

저는 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를 얻을 수 있지만, 내가 왜 이해가 안 돼요 이 예외가 발생했습니다. 내 코드에 문제가 있습니까?

+0

Clojure 1.2 이상을 사용하고 있다면'defstruct' 대신'deftype'을 사용합니다. 'deftype'을 사용하면'add-bst'와 유사한 함수를 더 멋지게 만들 수있는 프로토콜을 사용할 수 있습니다. 왜냐하면'nil'에'extend-type'을 사용할 수 있기 때문에'nil'을 효과적으로 처리 할 수 ​​있습니다 BST 노드였습니다. – Brian

답변

3

나는

다른 뭔가로 함수 매개 변수의 이름을 변경하십시오 .... 당신이 값이 nil이 때 구조체 맵을 혼란 함수의 매개 변수에 "서머 타임"을-사용하고 있기 때문에 그것이 생각한다.

+0

나는이 매개 변수의 이름을 변경했는데 이제는이'(add-bst 0 (struct-map bst : left nil : right nil : key 5))'를 실행하려고 할 때 다음과 같은 오류가 발생합니다. 다음은 오류입니다 :'# haluk

+1

@haluk : 구조체 맵 호출에서 키와 값을 줄 필요가 있습니다. ": : key (: key bst-t)"대신 – mikera

+0

@haluk : 질문을 적절히 편집하십시오. – Svante