我刚开始使用 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 variable: y”。您能解释一下这个错误背后的原因吗?
非常感谢您的帮助:)
最佳答案
Scheme 中的函数定义原语称为 define
,不是def
.
事实上,整个(def ...)
表达式被视为对 def
的函数调用。因此需要找到其参数的值。第一个参数(myFunc x y z)
是一个函数调用,因此需要找到它的参数值。显然您的实现想要找出 y
的值第一的。
The R5RS standard says “对运算符和操作数表达式进行求值(以未指定的顺序),并将结果过程传递给结果参数。”
您的实现很可能首先选择最右边的参数,这会导致 (<= x y)
首先被评估(因为评估cond
和and
特殊形式的特殊规则),与y
在其最右边的位置。
关于scheme - 是什么原因导致Scheme中出现未绑定(bind)变量错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37240707/