Function: math-expand-term

math-expand-term is an autoloaded and byte-compiled function defined in calc-poly.el.gz.

Signature

(math-expand-term EXPR)

Source Code

;; Defined in /usr/src/emacs/lisp/calc/calc-poly.el.gz
(defun math-expand-term (expr)
  (cond ((and (eq (car-safe expr) '*)
	      (memq (car-safe (nth 1 expr)) '(+ -)))
	 (math-add-or-sub (list '* (nth 1 (nth 1 expr)) (nth 2 expr))
			  (list '* (nth 2 (nth 1 expr)) (nth 2 expr))
			  nil (eq (car (nth 1 expr)) '-)))
	((and (eq (car-safe expr) '*)
	      (memq (car-safe (nth 2 expr)) '(+ -)))
	 (math-add-or-sub (list '* (nth 1 expr) (nth 1 (nth 2 expr)))
			  (list '* (nth 1 expr) (nth 2 (nth 2 expr)))
			  nil (eq (car (nth 2 expr)) '-)))
	((and (eq (car-safe expr) '/)
	      (memq (car-safe (nth 1 expr)) '(+ -)))
	 (math-add-or-sub (list '/ (nth 1 (nth 1 expr)) (nth 2 expr))
			  (list '/ (nth 2 (nth 1 expr)) (nth 2 expr))
			  nil (eq (car (nth 1 expr)) '-)))
	((and (eq (car-safe expr) '^)
	      (memq (car-safe (nth 1 expr)) '(+ -))
	      (integerp (nth 2 expr))
              (if (and
                   (or (math-known-matrixp (nth 1 (nth 1 expr)))
                       (math-known-matrixp (nth 2 (nth 1 expr)))
                       (and
                        calc-matrix-mode
                        (not (eq calc-matrix-mode 'scalar))
                        (not (and (math-known-scalarp (nth 1 (nth 1 expr)))
                                  (math-known-scalarp (nth 2 (nth 1 expr)))))))
                   (> (nth 2 expr) 1))
                  (if (= (nth 2 expr) 2)
                      (math-add-or-sub (list '* (nth 1 (nth 1 expr)) (nth 1 expr))
                                       (list '* (nth 2 (nth 1 expr)) (nth 1 expr))
                                       nil (eq (car (nth 1 expr)) '-))
                    (math-add-or-sub (list '* (nth 1 (nth 1 expr))
                                           (list '^ (nth 1 expr)
                                                 (1- (nth 2 expr))))
                                     (list '* (nth 2 (nth 1 expr))
                                           (list '^ (nth 1 expr)
                                                 (1- (nth 2 expr))))
                                     nil (eq (car (nth 1 expr)) '-)))
                (if (> (nth 2 expr) 0)
                    (or (and (or (> math-mt-many 500000) (< math-mt-many -500000))
                             (math-expand-power (nth 1 expr) (nth 2 expr)
                                                nil t))
                        (list '*
                              (nth 1 expr)
                              (list '^ (nth 1 expr) (1- (nth 2 expr)))))
                  (if (< (nth 2 expr) 0)
                      (list '/ 1 (list '^ (nth 1 expr) (- (nth 2 expr)))))))))
	(t expr)))