Function: math-decompose-units
math-decompose-units is a byte-compiled function defined in
calc-units.el.gz.
Signature
(math-decompose-units UNITS)
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calc-units.el.gz
(defun math-decompose-units (units)
(let ((u (math-check-unit-name units)))
(and u (eq (car-safe (nth 1 u)) '+)
(setq units (nth 1 u))))
(setq units (calcFunc-expand units))
(and (eq (car-safe units) '+)
(let ((entry (list units calc-internal-prec calc-prefer-frac)))
(or (equal entry (car math-decompose-units-cache))
(let ((ulist nil)
(utemp units))
(while (eq (car-safe utemp) '+)
(setq ulist (cons (math-decompose-unit-part (nth 2 utemp))
ulist)
utemp (nth 1 utemp)))
(setq ulist (cons (math-decompose-unit-part utemp) ulist)
utemp ulist)
(while (setq utemp (cdr utemp))
(unless (equal (nth 2 (car utemp)) (nth 2 (car ulist)))
(error "Inconsistent units in sum")))
(setq math-decompose-units-cache
(cons entry
(sort ulist
(lambda (x y)
(not (Math-lessp (nth 1 x)
(nth 1 y)))))))))
(cdr math-decompose-units-cache))))