diff options
Diffstat (limited to 'series.mac')
| -rw-r--r-- | series.mac | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -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 */ |
