The problem is that people don't learn about bound and unbound variables
and pure functions when they are introduced to them in courses that
teach integration or summation. Often it doesn't matter, if you keep
every name different. Computers are not smart about context, and the
programmer ends up guessing at the use patterns.
A clear way, used in RootsOf in Mathematica, but not in other places,
is to use functions, as I pointed out earlier today.
Let f(i):= i^2
then sum(f, 1, 10)
or integrate(f, 1,10)
is clear.
if you have an expression, you can write integrate( lambda([x],x^2),
1, 10)
also integrate(f) becomes lambda([i],i^3/3).
diff(f) becomes lambda([i],2*i)
etc
Not so conventional. Can this be made nice? Can this be made compatible
with current Maxima? Probably not.
RJF
Barton Willis wrote:
> Learning when to quote is an essential part of learning Maxima. So
> we should do less to protect users from unquoted expressions
> (fewer defmspec functions)---there are many cases where expressions
> must be quoted, so why protect users using sum, product, and ....?
>
> I was looking at how to support lsum(p,k, rootsof(q,x))
> expressions. The natural approach is to make lsum into a simplifying
> function. That's not difficult and it doesn't cause problems with the
> test suite. So I looked at how sum and lsum work. It's a mess.
> The user documentation doesn't help all that much.
>
> (%i1) (a : b, b : c, c : d, d : e, e : f, f : g, g : h)$
>
> (%i2) sum(a * b, b, 5,6);
> (%o2) 61
>
> (%i3) lsum(a * b, b, [5,6]);
> (%o3) 11*b
>
> (%i4) sum('a * b, b, 5,6);
> (%o4) 11*a
>
> (%i5) lsum('a * b, b, [5,6]);
> (%o5) 11*a
>
> (%i6) sum(a * 'b, b, 5,6);
> (%o6) 61
>
> (%i7) lsum(a * 'b, b, [5,6]);
> (%o7) 2*b^2
>
> (%i8) sum('(a * b), b, 5,6);
> (%o8) 11*a
>
> (%i9) lsum('(a * b), b, [5,6]);
> (%o9) 2*a*b
>
> (%i10) sum(sum(a*b,a,5,6),b,2,3);
> (%o10) 55
>
> (%i11) lsum(lsum(a*b,a,[5,6]),b,[2,3]);
> (%o11) 55
>
> (%i12) sum(sum('a*b,a,5,6),b,2,3);
> (%o12) 55
>
> (%i13) lsum(lsum('a*b,a,[5,6]),b,[2,3]);
> (%o13) 10*a
>
> (%i14) sum(sum(a*'b,a,5,6),b,2,3);
> (%o14) 55
>
> (%i15) lsum(lsum(a*'b,a,[5,6]),b,[2,3]);
> (%o15) 22*b
>
> (%i16) sum(sum('(a*b),a,5,6),b,2,3);
> (%o16) 55
>
> (%i17) lsum(lsum('(a*b),a,[5,6]),b,[2,3]);
> (%o17) 4*a*b
>
> Barton
>
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
>