From c431c7302893f3d3e8c87f6c0deb039fe491c278 Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Mon, 14 Nov 2005 20:12:56 +0000 Subject: [PATCH] (calcFunc-write-out-power): Rename calcFunc-powerexpand. (math-write-out-power): Rename math-powerexpand, have it handle negative exponents. (calc-writeoutpower): Rename calc-powerexpand. --- lisp/calc/calc-alg.el | 45 ++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/lisp/calc/calc-alg.el b/lisp/calc/calc-alg.el index 11d550bb5d2..a57f7ede375 100644 --- a/lisp/calc/calc-alg.el +++ b/lisp/calc/calc-alg.el @@ -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: ") -- 2.39.2