1
我写了一个程序来计算第一的平方和的总和第二个最大的3个数字如下...之和的3 SICP练习
(define (max2of3 x y z)
(let ((first (max x y))
(second (max first z)))
(+ (* first first) (* second second))))
但我得到一个的错误,当我执行它...
[2](负载 “max2of3”) 行 [3](max2of3 1 2 3)
[VM ERROR遇到!]变量不是在词法环境 定义FIRST
虽然我明白错误是由于解释器无法识别变量'FIRST'而导致的,我不明白为什么?
根据定义从SICP:
的let表达式的第一部分是名称表达对的列表。当评估let时,每个名称都与相应表达式的值相关联。 let的主体用 进行评估,这些名称绑定为局部变量
这是否意味着“让”构造在声明块中声明变量?
谢谢。
啊,我跳下文本 “变量值计算的让利外读下一段的gun..should。这一点很重要,当表达式 本地变量提供值取决于变量与 本地变量本身具有相同的名称“ – sachinrahulsourav 2012-03-13 20:55:06
经验丰富的Schemers/Lispers将使用'let *'而不是嵌套'let's。 (let *'是一个只扩展到嵌套'let's的宏。) – 2012-03-13 21:18:06
好吧,我用let *构造: '(define(max2of3 xyz) (let *((first(max xy))当我打电话给我时(max2of3 3 5 2),它给了我一个结果50吗?其评估(+ 25 25)莫名其妙.. 此代码有什么问题? – sachinrahulsourav 2012-03-13 22:07:06