Re: Function with attributes Flat and OneIdentity

• To: mathgroup at christensen.cybernetics.net
• Subject: [mg1098] Re: Function with attributes Flat and OneIdentity
• From: beretta at ATHENA.MIT.EDU (Robert K Beretta)
• Date: Sun, 14 May 1995 22:21:35 -0400
• Organization: Massachusetts Institute of Technology

```In article <3oru78\$psl at news0.cybernetics.net> Marc Mazzariol
<mmazzari at didec14.epfl.ch> writes in part:

>So my problem is that i want to create a function like Plus :
>
>	Plus has the attributes Flat and OneIdentity
>	Plus[2] gives 2	(and not Plus[2] like my function r does)
>	Plus[Plus[2]] gives 2 ( ""              ""         ""  )
>	Plus[2,2] gives 4  (and not \$Itera... like my function r does)
>
>How can I do it ????

In answer to a related question of my own, Dave Withoff at WRI gave me an
example that showed that the relative order of attribute and downvalue
assignments can be relevant to the behavior of a function.  If assignments are
made as follows, I believe you get the behavior you want:

In[1]:=
ClearAll[r]
r[x_]:=x
Attributes[r] = {Flat};

In[2]:=
r[2]

Out[2]=
2

In[3]:=
r[r[2]]

Out[3]=
3

In[4]:=
r[2, 2]

Out[4]=
r[2, 2]

In[5]:=
r[2, r[3, 2]]

Out[5]=
r[2, 3, 2]

However, if the attribute and downvalue assignments are made in the opposite
order, the behavior will change:

In[6]:=
ClearAll[r]
Attributes[r] = {Flat};
r[x_]:=x

In[7]:=
r[2]

\$IterationLimit::itlim: Iteration limit of 4096 exceeded.

Out[7]=
Hold[r[2]]

I'm afraid I can't offer a low-level explanation for this behavior, maybe
someone else can clarify.

Bob B.

```

• Prev by Date: Re: play to wav?
• Next by Date: Re: Random[BinomialDistribution[..]] wrong ?
• Previous by thread: Re: Function with attributes Flat and OneIdentity
• Next by thread: Solving 3-vector equations