Changing the order of *opers-list eliminates some bugs (it might introduce
other bugs). Is it intentional that the *opers-list ordering matter?
Example:
(%i1) declare(f, multiplicative, f, additive)$
Not OK -- the expand(%,0,0) shouldn't be needed:
(%i2) f(a*b+c);
(%o2) f(c)+f(a*b)
(%i3) expand(%,0,0);
(%o3) f(c)+f(a)*f(b)
Reversing *opers-list eliminates the bug (for no particular reason,
reverse the list):
(%i4) :lisp(setq *opers-list (reverse *opers-list));
OK:
(%i4) f(a*b+c);
(%o4) f(c)+f(a)*f(b)
The order of the declare --- say declare(f, additive, f, multiplicative, f)
doesn't make any difference, I think.
Barton