我需要为 Scheme 中的简单算术表达式定义一个计算器。例如,当键入 时(calculator '( 1 + 2)),方案解释器将打印3. 计算器将接受任何长度的表达式,并且表达式关联到右侧。例如,在(calculator '(1 + 1 - 2 + 3 ))表达式中被解释为(1 + (1 - (2 + 3))),因此值为-3。我假设表达式只有+and-运算符,并且输入中没有括号。到目前为止,我编写了这个程序:
#lang lazy
(define (calculator exp)
(cond
((null? exp) 0)
(= (length (exp)) 1 exp)
(eq? '+ (cdr (cdr exp)) (+ (car exp) (calculator (cdr (cdr exp)))))
(else (eq? '- (cdr (cdr exp)) (- (car exp) (calculator (cdr (cdr exp)))))))
但是当我尝试类似的东西时(calculator '(1 + 1 + 1)),我得到了这个错误:
#%module-begin: allowed only around a module body in: (#%module-begin (define
(calculator exp) (cond ((null? exp) 0) (= (length (exp)) 1 exp) (eq? (quote +)
(cdr (cdr exp)) (+ (car exp) (calculator (cdr (cdr exp))))) (else (eq? (quote -)
(cdr (cdr exp)) (- (car exp) (calculator (cdr (cdr exp)))))))) (calculator
(quote (1 + 1 + 1))))
我对 Scheme 很陌生,因此我们将不胜感激任何帮助