MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

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?


  • Prev by Date: Conceptual Issues with NonlinearRegress[]
  • Next by Date: Re: Merging graphic objects, exporting graphics and much more worries...
  • Previous by thread: Re: Curiosity concerning transformation rules for List
  • Next by thread: Re: Curiosity concerning transformation rules for List