Re: RE: question on changing 'type' of numbers

*To*: mathgroup at smc.vnet.net*Subject*: [mg69534] Re: [mg69495] RE: [mg69473] question on changing 'type' of numbers*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Fri, 15 Sep 2006 06:44:41 -0400 (EDT)

On 14 Sep 2006, at 19:55, David Park wrote: > Nasser, > > You can't change the Head of anything that gives True to AtomQ. You > cannot > access the stored data of an atom and in most cases this is for > good reason. > > However, there seem to be cases where this is only partly true. For > example > with complex numbers... > > AtomQ[2 + 3 I] > True > > We can't change the Head > > Head[List @@ (2 + 3 I)] > Complex > > but we can certainly access the parts > > 2 + I 3 /. Complex[a_, b_] -> {a, b} > {2, 3} > > Maybe others will point out other 'in between' objects. > > David Park > djmp at earthlink.net > http://home.earthlink.net/~djmp/ I would not actually call them "in between" objects. Many, or perhaps most, atoms have special functions for accessing "parts" of them, in particular: AtomQ[z=Complex[2,3]] True {Re[#],Im[#]}&[z] {2,3} AtomQ[r=Rational[2,3]] True {Denominator[#],Numerator[#]}&[r] {3,2} AtomQ[str="my dog"] True StringTake[str,1] m This is also an atom: AtomQ[s=SparseArray[IdentityMatrix[5]]] True Unlike with other atoms you can use Part on it, but it does not give what you might expect: Last[s]//InputForm SparseArray[Automatic, {5}, 0, {1, {{0, 1}, {{5}}}, {1}}] To get the "last part" in the usual (non-atomic) sense you have to use something like: s/.SparseArray[a_,b_,c_,d_]->d//InputForm {1, {{0, 1, 2, 3, 4, 5}, {{1}, {2}, {3}, {4}, {5}}}, {1, 1, 1, 1, 1}} Andrzej Kozlowski