About declaring . and sconcat as n-ary, I seem to recall that Maxima's notion of n-ary-ness is equivalent to being associative in addition to being defined for arbitrary lists of arguments (maybe this coincides with a conventional understanding of the term, I dunno). I guess that implies such functions are defined for the no-arguments case, although I don't know if all n-ary functions behave that way in Maxima. Sounds like . (with suitable flags) and sconcat have those properties; given that, it...
Pretty-printer slightly incorrect output for 'product(...)
Fixed by commit [ b83d81f ].
Agreed that user-defined and built-in operators should act the same. I see that lreduce, rreduce, and tree_reduce also take an initial value as an argument. Maybe while we're at it, we can ensure that those have the same behavior as xreduce.
@jgmbenoit I notice that Debian bugreport #1131495 is marked "closed". From your point of view, is there any further action needed on the part of the Maxima project?
I agree the existing built-in Boolean operators are more than a bit of a mess, although given that they are widely used and therefore baked into a lot of existing code, we would have to talk about the consequences of changing them. I am going to guess that the crucial aspect, from a user's point of view, is that and and or are noncommutative and short-circuiting. (I am also guessing that simplifying versus evaluating is less of an issue.) I will assume for now that we can't change the existing noncommutative,...
I see tex(x) produces just x as expected. Looks like TEX-ATOM looks for a REVERSEALIAS property, maybe mathml should do likewise.
Makes sense to me. We can get most or all of the way there by removing the display properties for %MTIMES. :lisp (remprop '%mtimes 'dissym) :lisp (remprop '%mtimes 'dimension) After that, I get: (%i9) '"*"(x, y); (%o9) *(x, y) (%i10) noundisp: true; (%o10) true (%i11) '"*"(x, y); (%o11) '*(x, y) (%i12) stringdisp: true; (%o12) true (%i13) '"*"(x, y); (%o13) '"*"(x, y) Is that it, or is there more that's needed? Would we want to do this for other operators?