Re: Loop programming; how do i do this ???
- To: mathgroup at smc.vnet.net
- Subject: [mg96113] Re: Loop programming; how do i do this ???
- From: Ray Koopman <koopman at sfu.ca>
- Date: Thu, 5 Feb 2009 04:40:29 -0500 (EST)
- References: <gmbr29$igp$1@smc.vnet.net>
On Feb 4, 2:35 am, plzhlp <n... at live.be> wrote: > I need to implement a function into my notebook but am having great difficulties even getting started (i'm new to mathematica and programming in general) > > The function accepts a 1d array (of variable length) of integers > > which will refer to a 2d array of constants, of which all need to be tested against eachother. > > for example: > > 1DArrayVar = {2, 4, 5} > > 2DArrayCon = { > {a1,b1,c1}, > {a2,b2,c2}, > {a3,b3,c3}, > {a4,b4,c4}, > {a5,b5,c5} > } > > Function[1DArrayVar] > > in this scenario will test: > > Do[ > Do[ > Do[ > > TEST[2DArrayCon[[2,x]],2DArrayCon[[4,y]],2DArrayCon[[5,z]]] > > , {x, Length[DArrayCon[[2]]] > , {y, Length[DArrayCon[[4]]] > , {z, Length[DArrayCon[[5]]] > > So basically the problem is that i need a variable amount of nested loops, as the length of 1DArrayVar will always be unknown. > > >From some research on the internet i've learned a recursive algorithm might be the solution, but i am completely lost on how to start -- > > any tips would be really appreciated ! var = {2, 4, 5}; con = {{a1,b1,c1}, {a2,b2,c2}, {a3,b3,c3}, {a4,b4,c4}, {a5,b5,c5}}; Map[test,Tuples[con[[var]]]] {test[{a2,a4,a5}],test[{a2,a4,b5}],test[{a2,a4,c5}],test[{a2,b4,a5}], test[{a2,b4,b5}],test[{a2,b4,c5}],test[{a2,c4,a5}],test[{a2,c4,b5}], test[{a2,c4,c5}],test[{b2,a4,a5}],test[{b2,a4,b5}],test[{b2,a4,c5}], test[{b2,b4,a5}],test[{b2,b4,b5}],test[{b2,b4,c5}],test[{b2,c4,a5}], test[{b2,c4,b5}],test[{b2,c4,c5}],test[{c2,a4,a5}],test[{c2,a4,b5}], test[{c2,a4,c5}],test[{c2,b4,a5}],test[{c2,b4,b5}],test[{c2,b4,c5}], test[{c2,c4,a5}],test[{c2,c4,b5}],test[{c2,c4,c5}]} If you don't want an output list, then Scan[test,Tuples[con[[var]]]] will give only whatever output a set of nested loops would. Note that the arguments to test are given as a list. If test does not want its arguments in a list, change test in Map or Scan to Apply[test,#]&. Map[Apply[test,#]&,Tuples[con[[var]]]] {test[a2,a4,a5],test[a2,a4,b5],test[a2,a4,c5],test[a2,b4,a5], test[a2,b4,b5],test[a2,b4,c5],test[a2,c4,a5],test[a2,c4,b5], test[a2,c4,c5],test[b2,a4,a5],test[b2,a4,b5],test[b2,a4,c5], test[b2,b4,a5],test[b2,b4,b5],test[b2,b4,c5],test[b2,c4,a5], test[b2,c4,b5],test[b2,c4,c5],test[c2,a4,a5],test[c2,a4,b5], test[c2,a4,c5],test[c2,b4,a5],test[c2,b4,b5],test[c2,b4,c5], test[c2,c4,a5],test[c2,c4,b5],test[c2,c4,c5]}