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