Re: Curiosity concerning transformation rules for List
- To: mathgroup at smc.vnet.net
- Subject: [mg70949] Re: Curiosity concerning transformation rules for List
- From: "Philipp" <Philipp.M.O at gmail.com>
- Date: Thu, 2 Nov 2006 06:48:19 -0500 (EST)
- References: <ei4ktg$dbf$1@smc.vnet.net>
This a very interesting question. I don't have an answer for it.
I THINK IT DESERVES AN ANSWER FROM THE MATHEMATICA CREW.
To restate your problem, you want to know how to assign DownValue to a
Locked symbol such as List[...] function/operator ?
In your example the assignments would be
In[ ]:= List /: List[x_, x_] := 0
or equivalently,
In[ ]:= {x_, x_} := 0
which, if successful, should result in
In[ ]:= {a, a}
{{a, b, c}, {a, b, c}}
{a, a, a}
Out[ ]= 0
0
{a, a, a}
In[ ]:= Information["List"]
{e1, e2, ... } is a list of elements.
{x_, x_} := 0
Attributes[List] = {Locked, Protected}
In[ ]:= DownValues[List]
Out[ ]= {{x_, x_} :> 0}
The above overloading of List is conceptually analogous to overloading
Plus as in the following example;
In[1]:= Unprotect[Plus];
Clear[Plus];
Plus /: Plus[x_, x_] := 0
(* or,
x_ + x_ := 0
*)
Protect[Plus];
In[5]:= v = 5;
In[6]:= v + v
In[7]:= Pi + Pi
In[8]:= h[v] + h[v]
Out[6]= 10
Out[7]= 0
Out[8]= 0
In[9]:= Information["Plus"]
"x + y + z represents a sum of terms."
Attributes[Plus] = {Flat, Listable, NumericFunction,
OneIdentity, Orderless, Protected}
x_ + x_ := 0
Default[Plus] := 0
In[10]:= DownValues[Plus]
Out[10]= {HoldPattern[x_ + x_] :> 0}
I hope we will get an answer.
Cheers,
Philipp
P.S. Notice that v + v (Out[6]) still evaluates as if Plus wasn't
overloaded. This is due to the fact that Plus transformation rules
regarding NumberQ[] entities are alwa
Andrew Moylan wrote:
> Since the List symbol is locked, I am curious about the possibility (or
> otherwise) of giving definitions for which the left-hand-side of the
> transformation rule contains only the List symbol. Here's an arbitrary,
> explicit example:
>
> Is it possible to make a definition such that: any list of two
> identical elements evaluates to the empty list? E.g. {x_, x_} -> {}.
>
> I can't see any way this transformation rule can be added. It's not
> possible to modify the DownValues for List; and there are no
> first-level symbols to which an UpValue can be added. Does anyone have
> any ideas?