我不熟悉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))))))
但是当我调用函数(preorder树)时,我得到以下异常:java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn
。
任何人都可以指导我做出的错误。
答案 0 :(得分:1)
(0)
尝试将0
作为函数调用:括号不用于分组,而是用于调用函数(或宏)。相反,只需写0
即可。同样,(v (preorder l) (preorder r))
会尝试将v
作为函数调用。相反,您可能想要(str v (preorder l) (preorder r))
。