Function: math-normalize
math-normalize is a byte-compiled function defined in calc.el.gz.
Signature
(math-normalize A)
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calc.el.gz
(defun math-normalize (a)
(setq math-normalize-error nil)
(cond
((not (consp a)) a)
((eq (car a) 'float)
(math-make-float (math-normalize (nth 1 a))
(nth 2 a)))
((or (memq (car a)
'(frac cplx polar hms date mod sdev intv vec var quote
special-const calcFunc-if calcFunc-lambda
calcFunc-quote calcFunc-condition
calcFunc-evalto))
(integerp (car a))
(and (consp (car a))
(not (eq (car (car a)) 'lambda))))
(require 'calc-ext)
(math-normalize-fancy a))
(t
(or (and calc-simplify-mode
(require 'calc-ext)
(math-normalize-nonstandard a))
(let ((args (mapcar #'math-normalize (cdr a))))
(or (condition-case err
(let ((func
(assq (car a) '( ( + . math-add )
( - . math-sub )
( * . math-mul )
( / . math-div )
( % . math-mod )
( ^ . math-pow )
( neg . math-neg )
( | . math-concat ) ))))
(or (and var-EvalRules
(progn
(or (eq var-EvalRules math-eval-rules-cache-tag)
(progn
(require 'calc-ext)
(math-recompile-eval-rules)))
(and (or math-eval-rules-cache-other
(assq (car a)
math-eval-rules-cache))
(math-apply-rewrites
(cons (car a) args)
(cdr math-eval-rules-cache)
nil math-eval-rules-cache))))
(if func
(apply (cdr func) args)
(and (or (consp (car a))
(fboundp (car a))
(and (not (featurep 'calc-ext))
(require 'calc-ext)
(fboundp (car a))))
(apply (car a) args)))))
(wrong-number-of-arguments
(setq math-normalize-error t)
(calc-record-why "*Wrong number of arguments"
(cons (car a) args))
nil)
(wrong-type-argument
(or calc-next-why
(calc-record-why "Wrong type of argument"
(cons (car a) args)))
nil)
(args-out-of-range
(setq math-normalize-error t)
(calc-record-why "*Argument out of range"
(cons (car a) args))
nil)
(inexact-result
(calc-record-why "No exact representation for result"
(cons (car a) args))
nil)
(math-overflow
(setq math-normalize-error t)
(calc-record-why "*Floating-point overflow occurred"
(cons (car a) args))
nil)
(math-underflow
(setq math-normalize-error t)
(calc-record-why "*Floating-point underflow occurred"
(cons (car a) args))
nil)
(void-variable
(setq math-normalize-error t)
(if (eq (nth 1 err) 'var-EvalRules)
(progn
(setq var-EvalRules nil)
(math-normalize (cons (car a) args)))
(calc-record-why "*Variable is void" (nth 1 err)))))
(if (consp (car a))
(math-dimension-error)
(cons (car a) args))))))))