在Scheme中引用未定义的标识符

时间:2011-10-25 00:25:28

标签: scheme

我正试图从我的书中运行这个方案程序,但每当我尝试评估时(减去5 4)。出现错误:“引用未定义的标识符:减号”。运行该函数(减5 4)显然不起作用。我是否将评估称为错误?

(define (eval-expr E)
  (cond
    ((number? E) E)
    ((eqv? (car E) 'plus) (apply + (eval-params (cdr E))))
    ((eqv? (car E) 'times) (apply * (eval-params (cdr E))))
    ((eqv? (car E) 'minus) (apply - (eval-params (cdr E))))      
    ((eqv? (car E) 'divide) (apply / (eval-params (cdr E))))
    (else '()) ; confused - return ()
    )
  )

(define (eval-params E)
  (if (null? E) '()
      (cons (eval-expr (car E)) (eval-params (cdr E)))
      )
)

1 个答案:

答案 0 :(得分:5)

看起来你想打电话

(eval-expr '(minus 5 4))

eval-expr函数采用表示算术表达式的数据。另一方面,您的示例(minus 5 4)代码,它正在尝试调用名为minus的函数。