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

Abh*_*pal 2 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)))))
Run Code Online (Sandbox Code Playgroud)

此函数返回两个最大数字的平方和.

当我运行它时,解释器给出"; Unbound变量:y".你能解释一下这个错误背后的原因吗?

非常感谢帮助:)

Wil*_*ess 5

Scheme中的函数定义原语被调用define,而不是def.

实际上,整个(def ...)表达式被视为函数调用def.因此需要找到其论点的价值观.第一个参数(myFunc x y z)是函数调用,因此需要找到它的参数值.显然你的实现想要找出y第一个的价值.

R5RS标准说 "运算符和操作数表达式被评估(以未指定的顺序),并且生成的过程将传递给结果参数."

很可能你的实现首先选择最右边的参数,从而导致(<= x y)第一被评价(因为评价的特殊规则condand 特殊形式),与y最右边的位置.