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: ")