Evaluating Expressions |
|
(define (expression expr)
(cond ((number? expr) expr)
((symbol? expr) (variable.value expr))
((binop? expr)
(let ((op (binop.op expr))
(rand-1 (expression
(binop.left expr)))
(rand-2 (expression
(binop.right expr))))
(cond ((eq? op '+)
(+ rand-1 rand-2))
((eq? op '*)
(* rand-1 rand-2))
(else (error "Bad operator"
expr)))))
(else (error "Bad expression" expr))))
| Jim Miller |