scheme - 是什么原因导致Scheme中出现未绑定(bind)变量错误?

标签 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)))))

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

当我运行它时,解释器给出“;Unbound variable: y”。您能解释一下这个错误背后的原因吗?

非常感谢您的帮助:)

最佳答案

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

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

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

您的实现很可能首先选择最右边的参数,这会导致 (<= x y)首先被评估(因为评估condand特殊形式的特殊规则),与y最右边的位置。

关于scheme - 是什么原因导致Scheme中出现未绑定(bind)变量错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37240707/

相关文章:

python - 关于从非常不相关的语言(在本例中是 Scheme 到 Python)翻译代码的建议?

C# 开发人员开始 SICP - 建议的开发环境?

Scheme - 正确使用 cons 来创建列表

functional-programming - 读SICP的前置条件是什么?

scheme - Scheme 中的 car 和 cdr 快把我逼疯了

scheme - 仅提取列表中的数字

algorithm - 递归算法中的基本情况和时间复杂度

clojure - 从具有 Clojure 和可读性问题的其他函数传递多个参数函数

python - 求值允许其运算符为复合表达式的组合

scheme - 错误 : Can't bind name in null syntactic environment