2014-10-19 6 views
0

Я новичок в clojure, а также в функциональном программировании. Я пытаюсь пройти дерево в предзаказа с помощью:Предварительный просмотр кучи

(def tree {:left 7 :val 4 :right {:left 4 :val 3 :right 1}}) 

(defn preorder 

[tree] 

    (if 

    (nil? tree)(0) 
    (let [v (:val tree) 

     l (:left tree) 

     r (:right tree)] 

     (print-str (v (preorder l) (preorder r)))))) 

Но я получаю следующее исключение: java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn когда я вызываю функцию (предпорядок дерево). Может ли кто-нибудь вести меня в какой ошибке я делаю.

ответ

1

(0) пытается вызвать 0 как функцию: скобки не для группировки, а для вызовов функций (или макросов). Вместо этого просто напишите 0. Аналогично, (v (preorder l) (preorder r)) пытается вызвать v как функцию. Вместо этого вы, вероятно, хотите что-то вроде (str v (preorder l) (preorder r)).

+0

Спасибо Я внес изменения в свой код, но я все еще не получаю ожидаемый результат. Выход «40030000». Можете ли вы сказать мне, правильно ли я применяю логику? – abc

+0

Ваше дерево не имеет согласованной структуры. Являются ли ': left' и': right' просто номерами, или они являются поддеревьями? Как и вы, вы вызываете свою функцию рекурсивно на 7, ': left' от корня и 7 val/left/right - все ноль. – amalloy

+0

Я создаю дерево, используя maps.:left и: right - поддеревья. – abc

Смежные вопросы