Mercurial > emacs
changeset 66863:78e895e87663
(calcFunc-write-out-power): Rename calcFunc-powerexpand.
(math-write-out-power): Rename math-powerexpand, have it handle
negative exponents.
(calc-writeoutpower): Rename calc-powerexpand.
author | Jay Belanger <jay.p.belanger@gmail.com> |
---|---|
date | Mon, 14 Nov 2005 20:12:56 +0000 |
parents | 5827a5ed37b9 |
children | 22f581f4fe39 |
files | lisp/calc/calc-alg.el |
diffstat | 1 files changed, 27 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/calc/calc-alg.el Mon Nov 14 20:12:35 2005 +0000 +++ b/lisp/calc/calc-alg.el Mon Nov 14 20:12:56 2005 +0000 @@ -92,30 +92,39 @@ (and n (list (prefix-numeric-value n))))))) ;;; Write out powers (a*b*...)^n as a*b*...*a*b*... -(defun calcFunc-writeoutpower (expr) - (math-normalize (math-map-tree 'math-write-out-power expr))) +(defun calcFunc-powerexpand (expr) + (math-normalize (math-map-tree 'math-powerexpand expr))) -(defun math-write-out-power (expr) +(defun math-powerexpand (expr) (if (eq (car-safe expr) '^) - (let ((a (nth 1 expr)) - (n (nth 2 expr)) - (prod (nth 1 expr)) - (i 1)) - (if (and (integerp n) - (> n 0)) - (progn - (while (< i n) - (setq prod (math-mul prod a)) - (setq i (1+ i))) - prod) - expr)) + (let ((n (nth 2 expr))) + (cond ((and (integerp n) + (> n 0)) + (let ((i 1) + (a (nth 1 expr)) + (prod (nth 1 expr))) + (while (< i n) + (setq prod (math-mul prod a)) + (setq i (1+ i))) + prod)) + ((and (integerp n) + (< n 0)) + (let ((i -1) + (a (math-pow (nth 1 expr) -1)) + (prod (math-pow (nth 1 expr) -1))) + (while (> i n) + (setq prod (math-mul a prod)) + (setq i (1- i))) + prod)) + (t + expr))) expr)) -(defun calc-writeoutpower () +(defun calc-powerexpand () (interactive) (calc-slow-wrapper - (calc-enter-result 1 "expp" - (calcFunc-writeoutpower (calc-top-n 1))))) + (calc-enter-result 1 "pexp" + (calcFunc-powerexpand (calc-top-n 1))))) (defun calc-collect (&optional var) (interactive "sCollect terms involving: ")