我从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)))))
此函数返回两个最大数字的平方和。
当我运行时,解释器发出&#34 ;;未绑定变量:y&#34;。你能解释一下这个错误背后的原因吗?
非常感谢帮助:)
答案 0 :(得分:5)
Scheme中的函数定义原语称为define
,而不是def
。
实际上,整个(def ...)
表达式被视为对def
的函数调用。所以它的论点&#39;需要找到的值。第一个参数(myFunc x y z)
是一个函数调用,因此需要找到它的参数值。显然,您的实现首先想要找出y
的值。
The R5RS standard says&#34;对运算符和操作数表达式进行求值(以未指定的顺序),并将结果过程传递给结果参数。&#34;
您的实施可能首先选择最右侧的参数,这会导致首先评估(<= x y)
(因为评估cond
和and
特殊表单的特殊规则< / em>),其最右侧的y
。