这两个运算符的计算器有什么问题?
whats is wrong with this two operator calculator?
我想编写一个名为 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))))))))
(exp)
您将 exp
括在括号中,这意味着您要求解释器调用当前绑定到 exp
的函数。但是 exp
是一个列表,不能被调用。您需要删除括号。
(... twooperatorcalculator ...)
紧接着,您有 twooperatorcalculator
,即 而不是 括在括号中,这意味着您要计算符号。这里会绑定一个函数对象,对于+
操作没有意义。您需要将其括在括号中以递归调用该函数。
我想编写一个名为 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))))))))
(exp)
您将 exp
括在括号中,这意味着您要求解释器调用当前绑定到 exp
的函数。但是 exp
是一个列表,不能被调用。您需要删除括号。
(... twooperatorcalculator ...)
紧接着,您有 twooperatorcalculator
,即 而不是 括在括号中,这意味着您要计算符号。这里会绑定一个函数对象,对于+
操作没有意义。您需要将其括在括号中以递归调用该函数。