Function: math-simplify

math-simplify is an autoloaded and byte-compiled function defined in calc-alg.el.gz.

Signature

(math-simplify TOP-EXPR)

Aliases

calcFunc-simplify

Source Code

;; Defined in /usr/src/emacs/lisp/calc/calc-alg.el.gz
(defun math-simplify (top-expr)
  (let ((math-simplifying t)
        (calc-angle-mode (if (calc-input-angle-units top-expr)
                             'rad
                           calc-angle-mode))
	(math-top-only (consp calc-simplify-mode))
	(simp-rules (append (and (calc-has-rules 'var-AlgSimpRules)
				 '((var AlgSimpRules var-AlgSimpRules)))
			    (and math-living-dangerously
				 (calc-has-rules 'var-ExtSimpRules)
				 '((var ExtSimpRules var-ExtSimpRules)))
			    (and math-simplifying-units
				 (calc-has-rules 'var-UnitSimpRules)
				 '((var UnitSimpRules var-UnitSimpRules)))
			    (and math-integrating
				 (calc-has-rules 'var-IntegSimpRules)
				 '((var IntegSimpRules var-IntegSimpRules)))))
	res)
    (if math-top-only
	(let ((r simp-rules))
	  (setq res (math-simplify-step (math-normalize top-expr))
		calc-simplify-mode '(nil)
		top-expr (math-normalize res))
	  (while r
	    (setq top-expr (math-rewrite top-expr (car r)
					 '(neg (var inf var-inf)))
		  r (cdr r))))
      (calc-with-default-simplification
       (while (let ((r simp-rules))
		(setq res (math-normalize top-expr))
                (if (not math-normalize-error)
                    (progn
                      (while r
                        (setq res (math-rewrite res (car r))
                              r (cdr r)))
                      (not (equal top-expr (setq res (math-simplify-step res)))))))
	 (setq top-expr res)))))
  top-expr)