# [Maxima] Excess simplifications (was tail-recursion)

van.Nek at gmx.net van.Nek at gmx.net
Mon Feb 20 12:42:15 CST 2006

Am 19 Feb 2006 um 11:48 hat Stavros Macrakis geschrieben:

> On 2/17/06, Richard Fateman <fateman at cs.berkeley.edu> wrote:
> > [Simplifya] returns quickly if the SIMP flag is set in the CAR of the expression.
>
> Yes, but simplifya still seems to be called in many situations where
> the argument should be known to have been simplified.  It is possible
> (but I am not sure) that the case blocking tail-recursion is one of
> them.  The reason I am not sure is that there is no clear, documented
> convention about what is guaranteed to return a simplified expression.
>  And even if there was one at some point, I suspect that it is not
> obeyed systematically.
>
>            -s

Hello Stavros,
isn't it possible to use an optional parameter in the translate functions, which supresses
the use of SIMPLIFY for arithmetic functions ?

We only need simplification, if we are doing symbolic computations. We don't need
them in arithmetics, right?

nsum(n,s):=
if n=0 then s
else nsum(n-1,s+n)\$

automatic translation by Maxima:

(PROGN
(DEFPROP \$NSUM T TRANSLATED)
(DEFMTRFUN (\$NSUM \$ANY MDEFINE NIL NIL) (\$N \$S)
(DECLARE (SPECIAL \$S \$N))
(COND
((LIKE \$N 0) \$S)

I only need this:

(defun \$nsum (n s)
(if (zerop n) s
(\$nsum (1- n)(+ s n)) ))

Volker