(define (plus-simplify e1 e2)
(cond
((and (number? e1) (number? e2)) (+ e1 e2))
((and (number? e1) (zero? e1)) e2) ; 0 plus x is x
((and (number? e2) (zero? e2)) e1)
(else (list '+ e1 e2)))) ; couldn't simplify
(define (times-simplify e1 e2)
(cond
((and (number? e1) (number? e2)) (* e1 e2))
((and (number? e1) (zero? e1)) 0) ; 0 times anything is 0
((and (number? e2) (zero? e2)) 0)
((and (number? e1) (= e1 1)) e2) ; 1 times x is x
((and (number? e2) (= e2 1)) e1)
(else (list '* e1 e2)))) ; couldn't simplify
Last modified: Wed Mar 29 20:28:20 PST 2000