alternatives to MapIndexed?
- To: mathgroup at smc.vnet.net
- Subject: [mg117685] alternatives to MapIndexed?
- From: Michael <michael2718 at gmail.com>
- Date: Tue, 29 Mar 2011 07:00:20 -0500 (EST)
Are there any alternatives to MapIndexed for determining where in an
expression a sub-expression is?
Specifically, I am trying to figure out a way to attach the depth of
certain sub-expressions to those sub-expressions. However, I want to
ignore (or include only) certain heads in the calculation of depth.
As an example:
In[137]:= MapIndexed[({#2, #1}) &,
F[a, b, F[x, y, G[v, F[q, r], w], z], c], Infinity]
Out[137]= F[{{1}, a}, {{2}, b}, {{3},
F[{{3, 1}, x}, {{3, 2}, y}, {{3, 3},
G[{{3, 3, 1}, v}, {{3, 3, 2},
F[{{3, 3, 2, 1}, q}, {{3, 3, 2, 2}, r}]}, {{3, 3, 3}, w}]}, {{3,
4}, z}]}, {{4}, c}]
What I would like is something that produces the output:
F[{{1}, a}, {{2}, b}, {{3},
F[{{3, 1}, x}, {{3, 2}, y}, {{3, 3},
G[v, F[{{3, 3, 1}, q}, {{3, 3, 2}, r}]}, w]}, {{3,
4}, z}]}, {{4}, c}]
i.e. in the above example only expressions with a head of F are counted
(or those with G are excluded).
An option to MapIndexed to include or exclude based on a pattern would
be great, if it existed.
I have found that I can kind of hack the solution using Length[Stack[]]
but it appears to be computationally prohibitive to use this approach
for large expressions. All the other things I have thought up wind up
causing uncontrolled recursion - Mathematica's approach to re-evaluating
an expression until nothing changes seems to be a big stumbling block I
have. Perhaps there is an easy solution I am missing.
Any suggestions?
Thanks,
Michael