Function: math-find-base-units-rec
math-find-base-units-rec is a byte-compiled function defined in
calc-units.el.gz.
Signature
(math-find-base-units-rec EXPR POW)
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calc-units.el.gz
(defun math-find-base-units-rec (expr pow)
(let ((u (math-check-unit-name expr)))
(cond (u
(dolist (x (math-find-base-units u))
(let ((p (* (cdr x) pow))
(old (assq (car x) math-fbu-base)))
(if old
(setcdr old (+ (cdr old) p))
(setq math-fbu-base
(cons (cons (car x) p) math-fbu-base))))))
((math-scalarp expr))
((and (eq (car expr) '^)
(integerp (nth 2 expr)))
(math-find-base-units-rec (nth 1 expr) (* pow (nth 2 expr))))
((eq (car expr) '*)
(math-find-base-units-rec (nth 1 expr) pow)
(math-find-base-units-rec (nth 2 expr) pow))
((eq (car expr) '/)
(math-find-base-units-rec (nth 1 expr) pow)
(math-find-base-units-rec (nth 2 expr) (- pow)))
((eq (car expr) 'neg)
(math-find-base-units-rec (nth 1 expr) pow))
((eq (car expr) '+)
(math-find-base-units-rec (nth 1 expr) pow))
((eq (car expr) 'var)
(or (eq (nth 1 expr) 'pi)
(error "Unknown name %s in defining expression for unit %s"
(nth 1 expr) (car math-fbu-entry))))
((equal expr '(calcFunc-ln 10)))
(t (error "Malformed defining expression for unit %s"
(car math-fbu-entry))))))