У меня есть этот код для вычисления производных:Expression Облегчение
(define (diff x expr)
(if (not (list? expr))
(if (equal? x expr) 1 0)
(let ((u (cadr expr)) (v (caddr expr)))
(case (car expr)
((+) (list '+ (diff x u) (diff x v)))
((-) (list '- (diff x u) (diff x v)))
((*) (list '+
(list '* u (diff x v))
(list '* v (diff x u))))
((/) (list ‘div (list '-
(list '* v (diff x u))
(list '* u (diff x v)))
(list '* u v)))
))))
Как можно упростить алгебраические выражения?
вместо x + x
показать 2x
и
вместо x * x
показать x^2
Для красивого резюме, включающего множество конкретных, простых в реализации правил, см. Статью: «История исчисления и развитие компьютерных алгебраических систем». Соответствующая глава: http://www.math.wpi.edu/IQP/BVCalcHist/calc5.html#_Toc407004393 – dsg