summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--series.mac9
1 files changed, 5 insertions, 4 deletions
diff --git a/series.mac b/series.mac
index b1b490d..14849d7 100644
--- a/series.mac
+++ b/series.mac
@@ -249,23 +249,24 @@ coefficients and finally multiply only upto expansion_order.
*/
expand_term(expr, coeffs) := block(
[tmp],
+ if atom(expr) then (
+ apply1(__expand_term_subst(wrap_exp(expr), coeffs), r_simp_small))
/* TODO: Recursive call instead of error */
- if op(expr) = "+" then (
+ elseif op(expr) = "+" then (
error("Term is itself a sum!"))
/* For single negation just call recursively */
elseif op(expr) = "-" then (
if length(args(expr)) # 1 then (
error("Unexpected '-' operator with more than 1 argument")),
expand(- expand_term(part(expr, 1), coeffs)))
- elseif op(expr) = "*" then (
+ elseif op(expr) = "*" or op(expr) = "^" then (
expand(__expand_term_prod(expr, coeffs)))
elseif op(expr) = "/" then block(
[n : part(expr, 1), d : part(expr, 2), expansion_order : expansion_order],
expansion_order : expansion_order - lopow(d, r),
expand(expand_term(n, coeffs) / d))
- /* TODO: better handle exponents */
else (
- apply1(__expand_term_subst(wrap_exp(expr), coeffs), r_simp_small)));
+ error(printf(false, "expand_term: invalid operator '~a'", op(expr)))));
/* Solve main equations term by term */