SICP 1.3 解释器错误未知标识符:和

SICP 1.3 interpreter error unknown identifier: and

我正在使用浏览器中的解释器(没有任何本地设置):https://inst.eecs.berkeley.edu/~cs61a/fa14/assets/interpreter/scheme.html
并收到以下解释器异常消息:

SchemeError: unknown identifier: and

Current Eval Stack:
-------------------------
0: and
1: (cond (and (< x y) (< x z)) (sqrt-sum y z))
2: (f 1 2 3)

对于以下代码:

; define a procedure that takes three numbers
; as arguments and returns the sum of the squares
; of the two larger numbers

(define (square) (* x x))
(define (sqrt-sum x y) 
  (+ (square x) (square y)))

(define (f x y z)
      (cond (and (< x y) (< x z)) (sqrt-sum y z))
      (cond (and (< y x) (< y z)) (sqrt-sum x z))
      (cond (and (< z y) (< z x)) (sqrt-sum x y)))

(f 1 2 3)

我正在努力寻找有关此解释器所基于的特定 Scheme 版本的任何信息;抱歉

cond 的语法不正确。语法是

(cond (condition1 value1...)
      (condition2 value2...)
      ...)

在您的代码中,第一个条件应该是表达式 (and (< x y) (< x z))。但是您没有围绕条件和值的括号。您只有 and 的条件,而不是 (and (< x y) (< x z))。由于 and 不是具有值的变量,因此会出现错误。

正确的语法是:

(define (f x y z)
  (cond ((and (< x y) (< x z)) (sqrt-sum y z))
        ((and (< y x) (< y z)) (sqrt-sum x z))
        ((and (< z y) (< z x)) (sqrt-sum x y))))