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 | ![]() |