Luc,
You could use Map with a negative level specification.
lst1 = {{0, 0, 0}, {1, 2, 3}};
lst2 = {{{0, 0, 0}, {1, 1, 1}}, {{1, 1, 1}, {2, 2, 2}, {3, 4, 3}}};
Map[transform, lst1, {-2}]
{transform[{0, 0, 0}], transform[{1, 2, 3}]}
Map[transform, lst2, {-2}]
{{transform[{0, 0, 0}], transform[{1, 1, 1}]}, {transform[{1, 1, 1}],
transform[{2, 2, 2}], transform[{3, 4, 3}]}}
David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/
From: Barthelet, Luc [mailto:lucb at ea.com]
To: mathgroup at smc.vnet.net
I have a function Foo (attribute hold) that will take 3D Points as
arguments either in a list or a list of lists.
So I can call:
Foo[{{0,0,0},{1,2,3}}]
Or
Foo[{{{0,0,0},{1,1,1}},{{1,1,1},{2,2,2},{3,4,3}}}]
Now, I would like to pattern match the triplets, so that I can run a
transformation (transform[u]) on them before releasing the hold on Foo.
Currently I do it with 2 rules and the conditional use of dimensions.
Foo [u_ /; Length[Dimensions[u]] == 2] :> Foo [transform /@ u],
Foo [u_ /; Length[Dimensions[u]] == 3] :> Foo [Map[transform, u,{2}]]
Is there a better way to do this?
Thanks
Luc