我已经写了一个递归函数来获取旅程的总成本。 costOfPath只需调用ubergraph即可获取每次旅程的成本,然后该函数添加并显示它。为什么我在这个递归函数中得到一个ClassCastException
(defn routeCost [parcel cost]
"Calculate the total route cost"
(if (empty? parcel)
(print "Total Journey Cost: " cost)
((def first-parcel (first parcel))
(def start (:start first-parcel))
(def finish (:finish first-parcel))
(def value (costOfPath start finish))
(def parcel-two (rest parcel))
(routeCost parcel-two (+ cost value)))))
(routeCost task8 0)
任务8看起来这样:
(def task8 [(Parcel. :main-office :r131 "Plastic Wallets" "Delivery" 1)
(Parcel. :r131 :r111 "CDs" "Delivery" 1)
(Parcel. :r111 :r121 "USBs" "Collection" 2)
(Parcel. :r121 :main-office "USBs" "Delivery" 2)])
功能打印出正确的成本,但给一个ClassCastException。
ClassCastException practice_ubergraph.core.Parcel cannot be cast to clojure.lang.IFn clojure.lang.Var.fn (Var.java:363)
包裹记录:
(defrecord Parcel [start
finish
package
run-type
weight
])
这究竟是为什么,以及如何我可以阻止它?
编辑:我认为它与IF语句和我已经把方括号放在块周围的方式。