Re: Unwanted Recursion

*To*: mathgroup at smc.vnet.net*Subject*: [mg120066] Re: Unwanted Recursion*From*: Bill Rowe <readnews at sbcglobal.net>*Date*: Thu, 7 Jul 2011 07:32:32 -0400 (EDT)

On 7/6/11 at 5:39 AM, casorati at f-m.fm (Casorati) wrote: >I'm trying to define an anti-commutative algebra in Mathematica. >Here I will show only a minimal example to demonstrate my point. The >product of two elements a^b should be give by p[a,b] so I make p >flat: Unless you are inventing new syntax a^b is not the product of a and b. It is a raised to the b power. >SetAttributes[p, {Flat}] >But now I want p[a] to reduce to a. Such a rule would make other >rules much simpler but when I define >p[a_] := a >the expression p[a] causes an infinite recursion. I get the message >$IterationLimit::itlim: Iteration limit of 4096 exceeded. While I cannot explain precisely why this message occurs I can confirm I get the same result when I set the attributes for p to be Flat. However, if I do not set the attributes of p then things work fine as demonstrated by: In[1]:= p[a_] := a In[2]:= p[a] Out[2]= a and given that p has been defined with a single argument, it makes no sense for it to also have the attribute Flat. If you were to define p to take an arbitrary number of arguments and give it the attribute Flat, i.e., In[6]:= Clear[p] In[7]:= SetAttributes[p, {Flat}] In[8]:= p[a__] := a In[9]:= p[a, b] Out[9]= Sequence[a,b] the error message doesn't occur.