[Date Index]
[Thread Index]
[Author Index]
Re: question on changing 'type' of numbers
*To*: mathgroup at smc.vnet.net
*Subject*: [mg69485] Re: question on changing 'type' of numbers
*From*: dimmechan at yahoo.com
*Date*: Thu, 14 Sep 2006 06:54:57 -0400 (EDT)
*References*: <ee8h72$j38$1@smc.vnet.net>
***Maybe I am wrong but I think this has to do with atomic expressions.
***You can apply a function to an atomic expression without getting an
error message;
however, in that case you simply get the atom back. E.g.
{h@@2,h@@f,Integer@@z}
{2, f, z}
***You can check if an expression is atomic with AtomQ
Information[AtomQ]
AtomQ[expr] yields True if expr is an expression which cannot be
divided into subexpressions, and yields False otherwise.
InputForm[Attributes[AtomQ] = {Protected}]
AtomQ/@{3,2.1+0.2\[ImaginaryI],"{1,2}",Ï?,{1,2},Sqrt[3]}
{True, True, True, True, False,False}
***However notice the following
Trace[Apply[Real,x],TraceOriginal->True]
{HoldForm[Real @@ x], {HoldForm[Apply]}, {HoldForm[Real]},
{HoldForm[x]}, HoldForm[Real @@ x], HoldForm[x]}
***There is the command HoldPattern (or Literal for older versions of
Mma)
Information[HoldPattern]
HoldPattern[expr] is equivalent to expr for pattern matching, but
maintains expr in an unevaluated form.
InputForm[Attributes[HoldPattern] = {HoldAll, Protected}]
***Then
Trace[Apply[Real,HoldPattern[x]],TraceOriginal->True]
{HoldForm[Real @@ HoldPattern[x]], {HoldForm[Apply]}, {HoldForm[Real]},
{HoldForm[HoldPattern[x]], {HoldForm[HoldPattern]},
HoldForm[HoldPattern[x]]}, HoldForm[Real @@ HoldPattern[x]],
HoldForm[Real[x]], {HoldForm[Real]}, {HoldForm[x]}, HoldForm[Real[x]]}
***So I guess you can get sth relevant to what you want working as
follows
Clear["Global`*"]
Head[x]
Symbol
x/:Head[x]=Integer (*Tag Head is protected so you cannot use
Head[x]=Integer*)
Integer
Head[x]
Integer
y=Apply[Real,HoldPattern[x]]
Real[x]
Head[y]
Real
***Cheers
Dimitris
Î?/Î? Nasser Abbasi ÎÎ³Ï?Î±Ï?Îµ:
> I think of a the Head of expression as its 'type'.
>
> One is supposed to be able to use Apply[f,expr] to change head of expression
> to f.
>
> But Why can't I use this to change the head of a Real number to Integer?
>
> In[122]:=
> Remove["Global`*"]
> x = 0.1
> Head[x]
> -------------->Real
> Apply[Integer,x]
> Head[x]
> ------------------->Real. I was expecting Intger
> x = Integer[x]
> Head[x]
> ----------------> Now it says Integer
>
> any idea?
>
> ofcourse the question as to what should happen to the value of the variable
> if for example I change the head of 0.5 from Real to Integer is another
> matter. It seems in this case x remained 0.1 but only the head said Integer
>
> x
> ----->Integer[0.1]
>
> Now sure what the above really means :)
>
> Nasser
Prev by Date:
**Re: Re: Re: solve and Abs**
Next by Date:
**Re: Color names and the 10 elementary colors?**
Previous by thread:
**Re: question on changing 'type' of numbers**
Next by thread:
**Re: RE: question on changing 'type' of numbers**
| |