【问题标题】:What causes an unbound variable error in Scheme?什么导致Scheme中的未绑定变量错误?
【发布时间】:2016-09-11 11:06:54
【问题描述】:

我是从 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)))))

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

当我运行它时,解释器给出“;未绑定变量:y”。你能解释一下这个错误背后的原因吗?

非常感谢您的帮助:)

【问题讨论】:

    标签: scheme sicp


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 非常感谢。它解决了我的问题。我不应该错过的。为什么我的代码会给出“未绑定变量:y”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多