预订遍历堆

时间:2014-10-19 02:54:17

标签: clojure

我不熟悉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。 任何人都可以指导我做出的错误。

1 个答案:

答案 0 :(得分:1)

(0)尝试将0作为函数调用:括号不用于分组,而是用于调用函数(或宏)。相反,只需写0即可。同样,(v (preorder l) (preorder r))会尝试将v作为函数调用。相反,您可能想要(str v (preorder l) (preorder r))

之类的东西