Newbie question about quotation



> How does one create a function in maxima like "sum(-) " which
> protects its first argument against premature evaluation?

Well, the direct answer is to use a macro definition --
describe("::=").  In general, I think this is a bad idea, because it
complicates the meaning of your program and makes it hard to compose
functionality naturally.  We recently went through this discussion
with 'plot2'....

I think it is a better idea to (a) write the underlying functions so
they act better and (b) quote when necessary.  In the longer term,
this is a problem we need to deal with in a more general way.

For your function ff, instead of writing

> ff(k):=if oddp(k) then 0 else 1

try

   ff(k) := if oddp(k) then 0 else if evenp(k) then 1 else funmake(ff,k)

This works better even with 'sum'.  Try, for example sum(ff(i),i,0,n)
with your definition and with this definition.  Unfortunately, neither
solution works perfectly -- if you later substitute 3 for n in the
result of the above sum, Maxima doesn't evaluate the ff's until you
explicitly ask it to (using ev(...,ff) or ev(...,nouns) ).  This is
partly because 'sum' is a bit too clever; I believe we will need to
revise it when we come up with a better solution (which we don't have
yet).
.
You can also specify that your function should take a quoted argument.

            -s