Scheme 表达式树求值

Scheme 表达式树求值,scheme,expression-trees,Scheme,Expression Trees,我正在尝试计算表达式树。这是我的密码: (define (eval-tree expr-tree) (eval-treeaux eval-tree expr-tree)) (define (eval-treeaux f expr-tree) (if (null? expr-tree) 0 (cond ((equal? '+ (operator expr-tree)) (+ (left-op expr-tree) (right-op expr-tree)))

我正在尝试计算表达式树。这是我的密码:

(define (eval-tree expr-tree)
  (eval-treeaux eval-tree expr-tree))

(define (eval-treeaux f expr-tree)
  (if (null? expr-tree)
      0
      (cond ((equal? '+ (operator expr-tree)) (+ (left-op expr-tree) (right-op expr-tree)))
            ((equal? '- (operator expr-tree)) (- (left-op expr-tree) (right-op expr-tree)))
            ((equal? '* (operator expr-tree)) (* (left-op expr-tree) (right-op expr-tree)))
            ((equal? '/ (operator expr-tree)) (/ (left-op expr-tree) (right-op expr-tree)))
            (else (f eval-treeaux expr-tree)))))
当我运行这个
(eval tree'((6*3)+(4-2))
时,它给出了以下错误:

+: expects type <number> as 1st argument, given: (6 * 3); other arguments 
   were: (4 - 2)
procedure application: expected procedure, given: 2; arguments were: 0
但是,当我运行这个
(eval tree'((6*3)+(4-2))
时,我得到了以下错误:

+: expects type <number> as 1st argument, given: (6 * 3); other arguments 
   were: (4 - 2)
procedure application: expected procedure, given: 2; arguments were: 0
我真的很困惑。有人能帮我吗? 感谢表达式
((6*3)+(4-2))
似乎由两个子表达式组成:

 (6 * 3)  ; e_1
 (4 - 2)  ; e_2

在计算父表达式之前,需要递归计算子表达式。

这是我在aux函数的else语句中所做的。我需要另一个递归函数吗?我不确定递归表达式是什么。@prgrammer:在
else
中这样做是不够的;您还必须对
+
-
*
/
的操作数执行此操作,尽管这种方法会变得很难看。您可能希望递归到每个子分支,但重构要做到干净。我同意下面的答案。另一个问题:为什么在空列表中返回零?另外,为什么要将此函数分为eval tree和eval treeaux?还有,你为什么要把eval tree传给eval treeaux?这段代码需要大量清理!