我需要为 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 很陌生,因此我们将不胜感激任何帮助