Re: Sqrt and Listability

*To*: mathgroup at smc.vnet.net*Subject*: [mg14880] Re: Sqrt and Listability*From*: "Allan Hayes" <hay at haystack.demon.co.uk>*Date*: Mon, 23 Nov 1998 10:11:58 -0500*References*: <7334kv$rqk@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Andrzej Kozlowski wrote in message <7334kv$rqk at smc.vnet.net>... >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? > >Andrzej Kozlowski > >Professor of Mathematics >Toyama International University >Toyama, JAPAN > > Andrej: Sqrt[x] is replaced by Power[x.1/2] which is computed; and Power is Listable. Further, in output, Power[x.1/2] is changes to Sqrt[x]. With Sqrt Listable, the computation runs Sqrt[{4,x}] -> {Sqrt[4],Sqrt[x]} -> {Power[4,1/2], Sqrt[x]} -> {2, Sqrt[x]} -> {2, Power[x,1/2]} -> {2, Sqrt[x} After ClearAttributes[Sqrt, Listable] we get Sqrt[{4,x}] -> Power[{x,4},1/2} -> {Power[4,1/2], Power[x.1/2]} -> {2, Power[x,1/2]} -> {2, Sqrt[x} Allan --------------------- Allan Hayes Mathematica Training and Consulting www.haystack.demon.co.uk hay at haystack.demon.co.uk Voice: +44 (0)116 271 4198 Fax: +44 (0)870 164 0565