2017-03-21 15 views
0

私は少し再帰関数を書いていますが、letブロックに再帰ビットを含めると、未処理のバインディングエラーがスローされます。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) 

任意のアイデア?

答えて

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が

(let [x1 x2] (print x1)) 

あなた]が間違った場所にあるようにする必要があります。

+0

関数は0のように評価されますが、3にする必要があります。それはコストを更新していませんか? – CS456

+0

あなたの助けを借りて、それを修正! – CS456

2

これは、経験豊富なClojureのプログラマとしてこれを実装するための「最善」の方法は、あろうことはさておきとして再帰的思考、メモを実践する細かな運動ですが:

(apply + (map :weight task5)) 

それもしないように、単純なそのために定義された関数が必要です。

関連する問題