函数未在let块中求值

时间:2017-03-21 13:38:12

标签: recursion clojure

我已经编写了一个小的递归函数,但是,如果我在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) 

有什么想法吗?

2 个答案:

答案 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))

您的]位置错误。