Я новичок в 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
когда я вызываю функцию (предпорядок дерево). Может ли кто-нибудь вести меня в какой ошибке я делаю.
Спасибо Я внес изменения в свой код, но я все еще не получаю ожидаемый результат. Выход «40030000». Можете ли вы сказать мне, правильно ли я применяю логику? – abc
Ваше дерево не имеет согласованной структуры. Являются ли ': left' и': right' просто номерами, или они являются поддеревьями? Как и вы, вы вызываете свою функцию рекурсивно на 7, ': left' от корня и 7 val/left/right - все ноль. – amalloy
Я создаю дерево, используя maps.:left и: right - поддеревья. – abc