Re: Sqrt and Listability
- To: mathgroup at smc.vnet.net
- Subject: [mg14875] Re: [mg14836] Sqrt and Listability
- From: BobHanlon at aol.com
- Date: Mon, 23 Nov 1998 10:11:54 -0500
- Sender: owner-wri-mathgroup at wolfram.com
In a message dated 11/20/98 6:09:36 AM, andrzej at tuins.ac.jp writes:
>I have come across a mystery. Solving it is a matter of absolutely no
>importance, yet I would be grateful for any help in putting it to rest.
>
>A few days ago I was giving my introductory course in Mathematica
>programming and was about to explain the 'Listable' attribute of
>functions, when on the spur of the moment I did something one should
>never do and departed from my prepared plan. I just got the idea that a
>good way to introduce listability would be to start with some very well
>known function, remove the Listable attribute, and then demonstrate
>that it would be really desirable to have it back. Of course I could
>have defined my own function but at this point we had not yet got as
>far as defining functions so I wanted to choose something very well
>known. Without any tests my choice fall on Sqrt. Sqrt is of course
>Listable:
>
>In[1]:=
>Sqrt[{4,9}]
>Out[2]=
>{2, 3}
>
>One can check it's attributes explicitly: In[2]:=
>Attributes[Sqrt]
>Out[2]=
>{Listable,NumericFunction,Protected}
>
>Now we remove Listable:
>
>In[3]:=
>ClearAttributes[Sqrt,Listable]
>
>Sqrt is no longer Listable:
>
>In[4]:=
>Attributes[Sqrt]
>Out[4]=
>{NumericFunction,Protected}
>
>Or is it?
>
>In[5]:=
>Sqrt[{4,9}]
>Out[5]=
>{2,3}
>
>This was a little embarrassing. I mumbled something to the effect that
>one should never trust a computer program and replaced Sqrt with Sin.
>Now everything worked as expected.
>
>My question is: why on earth is Listablity "hard wired" into Sqrt but
>not in other functions, like Sin. Log etc. Is this just a accidental
>quirk (I wouldn't even call it a bug) which just proves my point about
>"never trusting a computer program" or is there something "deep"
>involved in this?
>
Sqrt[{x, y}]
{Sqrt[x], Sqrt[y]}
%//FullForm
List[Power[x,Rational[1,2]],Power[y,Rational[1,2]]]
Sqrt uses Power. To make Sqrt non-Listable you need to clear the
Listable attribute from both Sqrt and Power
ClearAttributes[{Sqrt, Power}, Listable]
Sqrt[{x, y}]
Sqrt[{x, y}]
SetAttributes[{Sqrt, Power}, Listable]
Bob Hanlon