Re: Impossible?
- To: mathgroup@smc.vnet.net
- Subject: [mg10559] Re: [mg10458] Impossible?
- From: seanross@worldnet.att.net
- Date: Tue, 20 Jan 1998 16:54:03 -0500
- References: <199801160934.EAA08231@smc.vnet.net.>
Arturas Acus wrote:
>
> Hello,
>
> I would like to construct a function which gives me an absolute Level of
> subexpression in expression. For example I want:
>
> a*(b+c*(d+AbsoluteLevelQ[e]))
>
> evaluate to
>
> Level[a*(b+c*(d+e)),e].
> ( AbsoiuteLevelQ climbs up until reaches In[], after that calls Level
> )
>
> More generally, I would like to control absolute level (level in respect
> to In[%]) at which patter matching take place. For example if pattern
> matches at Level n>3, then rule is applied, but if it matches at
> Level n<3 then not.
>
> I suspect, that evaluation machinery here is hardly involved. Do
> Mathematica language provides tools for such a control? Please comment
> if solution don't exist.
>
> Arturas Acus
> Institute of Theoretical
> Physics and Astronomy
> Gostauto 12, 2600,Vilnius
> Lithuania
>
> E-mail: acus@itpa.lt
> Fax: 370-2-225361
> Tel: 370-2-612906
Every mathematica expression is a list of some sort. If you type in an
algebraic expression like:
In[6]:=
f=x*Sin[y]+3*Exp[-x^3-4 x +7];
The various "elements" of f can be found just like in a regular list. I
show a few examples below:
In[7]:=
f[[0]]
Out[7]=
Plus
In[8]:=
f[[1]]
Out[8]=
3*E^(7 - 4*x - x^3)
In[9]:=
f[[2]]
Out[9]=
x Sin[y]
In[12]:=
Dimensions[f[[1]]]
Out[12]=
{2}
In[13]:=
f[[1,1]]
Out[13]=
3
In[14]:=
f[[1,2]]
Out[14]=
E^(7 - 4*x - x^3)
You might also check out the LeafCount,TreeForm, Level, Depth, Position
etc. in chapter 2.1.4 of the mathematica book. In particular,
something like
MatrixForm[Table[Level[f,n],{n,1,Depth[f]}]]
can give you a graphic representation of the data available and
Level[f,Depth[f]]
returns a list of all possible subexpressions.
{3, E, 7, -4, x, -4*x, -1, x, 3, x^3, -x^3, 7 - 4*x - x^3,
E^(7 - 4*x - x^3), 3*E^(7 - 4*x - x^3), x, y, Sin[y],
x*Sin[y]}
To find the complete location of one of those elements, say 7, use:
Position[f,7,Depth[f]]
which returns an exact description of where in the expression you can
find that subexpression:
{{1,2,2,1}}
Hope that helps.
--
Remove the _nospam_ in the return address to respond.
- References:
- Impossible?
- From: "Arturas Acus" <acus@itpa.lt>
- Impossible?