Function: math-rewrite
math-rewrite is an autoloaded and byte-compiled function defined in
calc-rewr.el.gz.
Signature
(math-rewrite REWRITE-WHOLE-EXPR RULES &optional MT-MANY)
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calc-rewr.el.gz
(defun math-rewrite (rewrite-whole-expr rules &optional mt-many)
(let* ((math-rewrite-whole-expr rewrite-whole-expr)
(math-mt-many mt-many)
(crules (math-compile-rewrites rules))
(heads (math-rewrite-heads math-rewrite-whole-expr))
(trace-buffer (get-buffer "*Trace*"))
(calc-display-just 'center)
(calc-display-origin 39)
(calc-line-breaking 78)
(calc-line-numbering nil)
(calc-show-selections t)
(calc-why nil)
(math-mt-func (lambda (x)
(let ((result (math-apply-rewrites x (cdr crules)
heads crules)))
(if result
(progn
(if trace-buffer
(let ((fmt (math-format-stack-value
(list result nil nil))))
(with-current-buffer trace-buffer
(insert "\nrewrite to\n" fmt "\n"))))
(setq heads (math-rewrite-heads result heads t))))
result))))
(if trace-buffer
(let ((fmt (math-format-stack-value (list math-rewrite-whole-expr nil nil))))
(with-current-buffer trace-buffer
(setq truncate-lines t)
(goto-char (point-max))
(insert "\n\nBegin rewriting\n" fmt "\n"))))
(or math-mt-many (setq math-mt-many (or (nth 1 (car crules))
math-rewrite-default-iters)))
(if (equal math-mt-many '(var inf var-inf)) (setq math-mt-many 1000000))
(if (equal math-mt-many '(neg (var inf var-inf))) (setq math-mt-many -1000000))
(math-rewrite-phase (nth 3 (car crules)))
(if trace-buffer
(let ((fmt (math-format-stack-value (list math-rewrite-whole-expr nil nil))))
(with-current-buffer trace-buffer
(insert "\nDone rewriting"
(if (= math-mt-many 0) " (reached iteration limit)" "")
":\n" fmt "\n"))))
math-rewrite-whole-expr))