Evaluating Expression Trees
Wanted: A procedure evaluate that can
evaluate any infix expression:
(evaluate (make-constant 13)) ⇒ 13
(evaluate (make-expr (make-constant 3) '- (make-constant 5))) ⇒ -2
Note that since we know the ADT representation of expressions, we can
"cheat" and give evaluate the representations directly:
(evaluate 13) ⇒ 13
(evaluate '(3 - 5)) ⇒ -2
(evaluate '(1 + (2 * (3 - 5)))) ⇒ -3
The latter is shorthand for:
(evaluate (make-expr (make-constant 1) '+
(make-expr (make-constant 2) '*
(make-expr (make-constant 3) '- (make-constant 5))))) ⇒ -3