Say I have some nested structure, such as {a,{{b,c},d,{e,{f,g}}}}
, and I want to apply a function $q$ to each of the leaves; that is, I want the output to be {q[a],{{q[b],q[c]},q[d],{q[e],{q[f],q[g]}}}}
. There must be a primitive to do this, but I can't find it. I initially thought that Map
with a third argument of Infinity
would do it, but that does something different (in addition to applying q
at the leaves, it also applies it to each higher-level list element).
Answer
A little "secret" of level specifications is that they can be negative. -1
refers to the atomic leaves, -2
refers to all Depth
2 subexpressions, generally -k
refers to all depth k
subexpressions. Thus the behaviour of negative levels is somewhat different from that of positive ones.
You can read more here:
Mapping at level {-1}
(i.e. only level -1
, not a range of levels) will accomplish what you need.
Level[{a, {{b, c}, d, {e, {f, g}}}}, {-1}]
(* {a, b, c, d, e, f, g} *)
Map[x, {a, {{b, c}, d, {e, {f, g}}}}, {-1}]
(* {x[a], {{x[b], x[c]}, x[d], {x[e], {x[f], x[g]}}}} *)
Comments
Post a Comment