Re: Thanks for Rearrangement & Format
- To: mathgroup at smc.vnet.net
- Subject: [mg5490] Re: [mg5438] Thanks for Rearrangement & Format
- From: Daniel Lichtblau <danl>
- Date: Wed, 11 Dec 1996 03:16:06 -0500
- Organization: wolfram.com
- Sender: owner-wri-mathgroup at wolfram.com
Susan Rempe wrote:
>
>
> Could you be more specific about the best way to
> go about this, please.
>
> On Mon, 9 Dec 1996, Daniel Lichtblau wrote:
>
> > Susan Rempe wrote:
> > >
> > > Thanks to all who responded to my 2 questions.
> > > The answers I liked best are the following:
> > >
> > > 1). To replace a term in a function without
> > > letting rearrangement occur, clear the
> > > attributes of the operator(s) and make
> > > orderless. Explicitly order terms with Sort.
> > >
> > > In[195]:= t=a+b+c+d;
> > > In[196]:= ClearAttributes[Plus,Orderless]
> > > In[197]:= t[[3]]=x
> > > In[198]:= t
> > > Out[198]= a + b + x + d
> > > In[199]:= Sort[%]
> > > Out[199]= a + b + d + x
> > >
> > >...
> > > Susan Rempe
> >
> > I'd recommend heavily against this method. What you want to do, it
> > appears, is reformat the expression. This can be done by a mix of
> > formatting rules and application of some dummy head e.g. ncPlus to your
> > expression (to replace the head Plus). The method you posted uses a very
> > dangerous tool, removal of Orderless attribute from Plus, to solve a
> > problem that is unrelated to the mathematics of a noncommutative
> > addition operator. Moreover, I very much doubt that the internals of
> > Mathematica will work correctly with such an operator. Which is what you
> > have, once that Orderless attribute has been cleared.
> >
> > Daniel Lichtblau
> > Wolfram Research
> > danl at wolfram.com
> >
This will work in version 2.2 or 3.0. It will use, internally, a dummy
head, but will print as "+" in infix form.
In[1]:= ??Infix
Infix[f[e1, e2, ...]] prints with f[e1, e2, ...] given in default infix
form:
e1 ~ f ~ e2 ~ f ~ e3 .... Infix[expr, h] prints with arguments
separated by
h: e1 h e2 h e3 ....
Attributes[Infix] = {Protected}
In[1]:= t = a + b + c + d
Out[1]= a + b + c + d
In[2]:= t2 = Apply[ncPlus, t]
Out[2]= ncPlus[a, b, c, d]
In[3]:= t3 = t2 /. c->x
Out[3]= ncPlus[a, b, x, d]
In[4]:= Infix[t3, "+"]
Out[4]= a+b+x+d
Daniel Lichtblau
Wolfram Research
danl at wolfram.com