;; 8.3 Expression Trees (define make-constant (lambda (x) x)) (define constant? number?) (define make-expr (lambda (operator operands) (cons operator operands))) (define operator car) (define operands cdr) (define operators ;; from the original version of exprs with left and right (lambda (expr) (if (constant? expr) '() (cons (operator expr) (append (operators (left-operand expr)) (operators (right-operand expr))))))) (define evaluate (lambda (expr) (cond ((constant? expr) expr) (else (apply (look-up-value (operator expr)) (map evaluate (operands expr))))))) (define look-up-value ;; back to the version in the book -- sorry Josh (lambda (name) (cond ((equal? name '+) +) ((equal? name '*) *) ((equal? name '-) -) ((equal? name '/) /) (else (error "Unrecognized name" name)))))