Re: Don't understand behavior of ClearAttributes[Plus,
- To: mathgroup at smc.vnet.net
- Subject: [mg84850] Re: [mg84840] Don't understand behavior of ClearAttributes[Plus,
- From: Daniel Lichtblau <danl at wolfram.com>
- Date: Wed, 16 Jan 2008 23:02:12 -0500 (EST)
- References: <200801160830.DAA10128@smc.vnet.net>
Alain Cochard wrote:
> I see from the archives that it is seldom a good idea to use
> ClearAttributes[Plus,Orderless] but I would nevertheless like to
> understand why it gives the behavior I expect in some cases and not in
> others, as exemplified below.
>
> Mathematica 6.0 for Linux x86 (32-bit)
> Copyright 1988-2007 Wolfram Research, Inc.
>
> In[1]:= {b + a, j + 1, "/"+">"}
>
> Out[1]= {a + b, 1 + j, > + /}
>
> To begin with, is it correct that the default ordering (as above) is
> defined by what is called "canonical order" in the documentation? If
> so, I found only rudimentary (as it seemed to me anyway) descriptions
> of what canonical order is. For example, it is said that
>
> "Mathematical operators appear in order of decreasing precedence."
>
> But how am I supposed to know or to determine that "/" is "less
> preceding" than ">"? Or maybe there are considered as strings here?
> Anyway, the question of why ">" comes before "/" remains.
>
> Also, I did not find anything regarding ordering/comparison of
> elements from different classes of expressions, as I understand "1"
> and "j" are.
>
> (Sorry if answers to these questions are easily found --I did search
> for them-- or if some questions don't even make sense.)
>
> In[2]:= ClearAttributes[Plus,Orderless]
>
> In[3]:= {b + a, j + 1, "/"+">"}
>
> Out[3]= {b + a, 1 + j, / + >}
>
> Here I get the behavior I expect for b + a and "/"+">" (order
> unchanged in output) but not for j + 1, changed to 1 + j. Why?
>
> Thanks for any hint.
> Alain
I do not know if canonical ordering is fully defined anywhere. Speaking
for myself and not Wolfram Research, I will say that I believe it should
NOT be defined, other than to note that such an ordering exists and is
employed in various situations. That way we are free to change ordering
specifics (as has happened in past) if and when we find issues in
efficiency that can be addressed by such changes.
From the viewpoint of programming language semantics, one would say
that programs depending on specifics of such ordering do not have well
defined behavior.
I will comment on the last example. It appears to be a bug in handling
of Plus, when set not to be Orderless. This is simply an indication
that, much as we try, we do not fully support making such a change.
Please bear in mind that basic arithmetic operations (Plus, Times, and
Power) are used extensively in Mathematica implementation, and
specialized handling that places numbers before other things in Plus and
Times is not particularly easy to undo, even when attributes change.
Which is one reason I strongly recommend not changing attributes of
those functions (read: It may be a bug, but I've no intention of
investigating it, let alone attempting a "fix").
Daniel Lichtblau
Wolfram Research
- References:
- Don't understand behavior of ClearAttributes[Plus,Orderless]
- From: Alain Cochard <alain@geophysik.uni-muenchen.de>
- Don't understand behavior of ClearAttributes[Plus,Orderless]