2016-05-15 127 views
2

我已經開始與SICP和我是新的計劃。我試過調試這段代碼,甚至將它與類似的解決方案進行比較。什麼會導致Scheme中的未綁定變量錯誤?

(def (myFunc x y z) 
    (cond ((and (<= x y) (<= x z)) (+ (* y y) (* z z))) 
      ((and (<= y x) (<= y z)) (+ (* x x) (* z z))) 
      (else (+ (* x x) (* y y))))) 

該函數返回兩個最大數的平方和。

當我運行這個時,解釋器給出「; Unbound變量:y」。你能解釋這個錯誤背後的原因嗎?

幫助是極大的讚賞:)

回答

5

功能定義在原始方案被稱爲define,不def

實際上,整個(def ...)表達式被視爲對def的函數調用。所以它的論點的價值需要被發現。第一個參數(myFunc x y z)是一個函數調用,因此需要找到它的參數值。顯然你的實施首先要找出y的價值。

The R5RS standard says「對運算符和操作數表達式進行評估(以未指定的順序),並將生成的過程傳遞給結果參數。」

很可能你的實現首先選擇最右邊的參數,從而導致(<= x y)第一被評價(因爲評價condand特殊形式的特殊規則),與y最右邊的位置。

+0

非常感謝。它解決了我的問題。我不應該錯過這個。爲什麼我的代碼會發出「Unbound variable:y」? –

相關問題