我目前正在通过练习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