我想编写一个名为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))))))))
答案 0 :(得分:2)
(exp)
您将exp
括在括号中,这意味着您正在要求解释器调用当前绑定到exp
的函数。但是exp
是一个列表,无法调用。您需要删除括号。
(... twooperatorcalculator ...)
在那之后,您将twooperatorcalculator
括在括号内 not ,这意味着您要评估该符号。在这里,它将绑定到功能对象,这对+
操作没有意义。您需要将其括在括号中以递归调用该函数。