我目前正在通過練習1.3的sicp書。這裏的問題描述:我嘗試用下面的代碼錯誤:無法在空語法環境中綁定名稱
(define (square x) (* x x))
(define (sq2largest a b c)
((define large1 (if (> a b) a b))
(define small (if (= large1 a) b a))
(define large2 (if (> c small) c small))
(+ (square large1) (square large2))))
來解決它。當我在麻省理工學院的方案運行它
Define a procedure that takes three numbers as arguments and returns the sum of the squares of the two larger numbers.
,我得到了以下錯誤:
;Can't bind name in null syntactic environment: large1 #[reserved-name-item 13]
使用谷歌搜索這個錯誤不會產生很多結果。有人知道我的代碼有什麼問題嗎? (我對Scheme不熟悉)
刪除內部圓括號確實有效,但我不明白如何解決問題。 define的語法是(定義)。我認爲我必須把所有的東西都歸爲,因此需要多加一對括號。 –
2013-02-16 07:27:28
@KietTran基本的'define'形式確實是'(define)''。但是您正在使用變體來定義函數,'(定義())'。您有''部分的額外支持。順便說一下,用於定義函數的第二個變化形式簡單地說就是糖:它是'(定義(lambda())'的簡寫形式。換句話說,「定義函數」意思是定義一個變量,其值是一個'lambda'而不是(說)一個數字或字符串。 –
2013-02-19 02:15:25