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