这两个运算符计算器有什么问题?

时间:2019-04-23 12:58:56

标签: scheme calculator mit-scheme

我想编写一个名为twoOperatorCalculator的过程,该过程将计算与左相关的中缀的加法和减法运算。操作以列表形式给出,并且输出应该是这些操作的结果。以下是此过程的示例输出:

1 ]=> (twoOperatorCalculator '(1 + 15 − 32/5 + −2))'<br/>
Value : 38/5<br/>

我做了很多尝试,但是我找不到我的错。错误就像

1 ]=> (twooperatorcalculator '(1+2-3+2))'

;The object (1+2-3+2) is not applicable.

我的密码

(define twooperatorcalculator 
  (lambda (exp) (
    (cond
      ((null? exp) 0)
      ((null? (cdr (cdr exp))) (car exp))
      ((eq? #\+ (cadr exp)) (+ (car (exp)) twooperatorcalculator (cdr (cdr exp))))
      ((eq? #\- (cadr exp)) (- (car (exp)) twooperatorcalculator (cdr (cdr exp))))))))

1 个答案:

答案 0 :(得分:2)

(exp)

您将exp括在括号中,这意味着您正在要求解释器调用当前绑定到exp的函数。但是exp是一个列表,无法调用。您需要删除括号。

(... twooperatorcalculator ...)

在那之后,您将twooperatorcalculator括在括号内 not ,这意味着您要评估该符号。在这里,它将绑定到功能对象,这对+操作没有意义。您需要将其括在括号中以递归调用该函数。