我已经编写了一个小的递归函数,但是,如果我在let块中包含递归位,则会抛出一个未报告的绑定错误。
代码:
(defn total-weight [parcel cost]
"Calculate the total route cost"
(if (not(empty? parcel))
(let [ first-parcel (first parcel)
weight (:weight first-parcel)
parcel-two (rest parcel)
(total-weight parcel-two (+ cost weight))
cost])))
(total-weight task5 0)
错误:
CompilerException java.lang.Exception: Unsupported binding form: (total-weight parcel-two (+ cost weight)), compiling:(/private/var/folders/2h/7b4v1ls11mjf_n5hb6mwngl40000gn/T/form-init2186446380943426996.clj:4:6)
有什么想法吗?
答案 0 :(得分:2)
虽然这是练习递归思维的一个很好的练习,但请注意,最好的"作为一名经验丰富的Clojure程序员实现这一目标的方法是:
(apply + (map :weight task5))
如此简单,它甚至不需要为它定义的功能。
答案 1 :(得分:1)
你的功能应该是这样的:
(defn total-weight [parcel cost] "Calculate the total route cost"
(if (not (empty? parcel))
(let [first-parcel (first parcel)
weight (:weight first-parcel)
parcel-two (rest parcel)]
(total-weight parcel-two (+ cost weight))
cost)))
让绑定应该像
(let [x1 x2] (print x1))
您的]
位置错误。