# HG changeset patch # User Jay Belanger # Date 1131999176 0 # Node ID 78e895e876633deaf7a02df2bb8c744905d7692d # Parent 5827a5ed37b91e3f9ed7821aac314f92c7b496c4 (calcFunc-write-out-power): Rename calcFunc-powerexpand. (math-write-out-power): Rename math-powerexpand, have it handle negative exponents. (calc-writeoutpower): Rename calc-powerexpand. diff -r 5827a5ed37b9 -r 78e895e87663 lisp/calc/calc-alg.el --- 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: ")