Re: Map[] and multiple args function
- To: mathgroup at smc.vnet.net
- Subject: [mg96230] Re: [mg96198] Map[] and multiple args function
- From: Sseziwa Mukasa <mukasa at jeol.com>
- Date: Tue, 10 Feb 2009 05:47:36 -0500 (EST)
- References: <200902091033.FAA12309@smc.vnet.net>
On Feb 9, 2009, at 5:33 AM, sagrailo at gmail.com wrote: > I know this has to be FAQ, but I'm just not able to find an answer > anywhere, so - here it goes: I have a multiple-arguments function, > say something like: > Foo[x_, y_, z_] := x + 2*y + 3*z > Now, I want to call this function number of times, over different sets > of arguments, and then to sum results. I thought about storing > argument triplets into some kind of list, and then employing sequence > of Map[] and Apply[] to get the job done. After number of trials and > errors, I came up with following piece of code doing the thing: > Plus @@ Foo /@ {{1, 2, 3}, {4, 5, 6}} /. List -> Sequence > but I even don't fully understand what's going here, and also I'm > wondering is there a "better" way to accomplish this. So - any > suggestion? Writing your code out longhand would help with interpretation, longhand it's: ReplaceAll[Apply[Plus, Map[Foo, List[List[1, 2, 3], List[4, 5, 6]]]], Rule[List, Sequence]] (obtained doing FullForm[Hold[Plus @@ Foo /@ {{1, 2, 3}, {4, 5, 6}} /. List -> Sequence]]) So the first thing that happens is Foo is mapped onto {{1, 2, 3}, {4, 5, 6}} giving {Foo[{1, 2, 3}], Foo[{4, 5, 6}]} Plus is applied giving: Foo[{1, 2, 3}],+Foo[{4, 5, 6}] then the lists are replaced by sequences leading to the evaluation of: Foo[1, 2, 3],+Foo[4, 5, 6] You can avoid the replace by applying Foo directly to the appropriate level of the argument list, either using the shorthand Plus@@Foo@@@{{1,2,3},{4,5,6}} or Apply[Plus,Apply[Foo,{{1,2,3},{4,5,6}},{1}]]
- References:
- Map[] and multiple args function
- From: sagrailo@gmail.com
- Map[] and multiple args function