什么原因导致Scheme中出现未绑定的变量错误?

时间:2016-05-15 16:21:45

标签: scheme sicp

我从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;。你能解释一下这个错误背后的原因吗?

非常感谢帮助:)

1 个答案:

答案 0 :(得分:5)

Scheme中的函数定义原语称为define,而不是def

实际上,整个(def ...)表达式被视为对def的函数调用。所以它的论点&#39;需要找到的值。第一个参数(myFunc x y z)是一个函数调用,因此需要找到它的参数值。显然,您的实现首先想要找出y的值。

The R5RS standard says&#34;对运算符和操作数表达式进行求值(以未指定的顺序),并将结果过程传递给结果参数。&#34;

您的实施可能首先选择最右侧的参数,这会导致首先评估(<= x y)(因为评估condand 特殊表单的特殊规则< / em>),最右侧的y