Optimization by Patterns
(def optpatterns '( ((+ ?x 0) ?x ) ((* ?x 0) 0 ) ((* ?x 1) ?x ) ((- (- ?x ?y)) (- ?y ?x) ) ((- 1 1) 0 ) ... ))
While humans are unlikely to write code such as x + 0, symbolic computations such as symbolic differentiation and automatic programming by substitution into design patterns can often generate such expressions.
deriv: (deriv2 (+ (expt x 2) (+ (* 3 x) 6)) x) der: (+ (+ (* 2 (+ (* (expt x (- 2 1)) 0) (* 1 (* (- 2 1) (* (expt x (- (- 2 1) 1)) 1))))) (* (* (expt x (- 2 1)) 1) 0)) (+ (+ (+ (* 3 0) (* 1 0)) (+ (* x 0) (* 0 1))) 0)) opt: 2