Re: Loop programming; how do i do this ???
- To: mathgroup at smc.vnet.net
- Subject: [mg96099] Re: [mg96071] Loop programming; how do i do this ???
- From: Sseziwa Mukasa <mukasa at jeol.com>
- Date: Thu, 5 Feb 2009 04:37:52 -0500 (EST)
- References: <200902041019.FAA18602@smc.vnet.net>
On Feb 4, 2009, at 5:19 AM, plzhlp 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 ! I assume the function test has some sort of side effect, because the return value of a Do expression is Null. Recursively, f[constants_,{var_},args__]:=Do[test[args,constants[[var,i]]], {i,Length[constants[[var]]]}] f[constants_,vars_,args__]:=Do[f[constants,Rest[vars],Join [{args},constants[[First[vars],i]]]],{i,Length[constants[[First [vars]]]]}] f[constants_,vars_]:=f[constants,vars,{}] f[constants_,{var_}]:=Do[test[constants[[var,i]]],{i,Length[constants [[var]]]}] I think an iterative version is clearer though: f[constants_,vars_]:=Module[{indices},Do[test[Sequence@@Table [constants[[vars[[j]],indices[j]]],{j,Length[vars]}]],Evaluate [Sequence@@Table[{indices[j],Length[constants[[vars[[j]]]]]},{j,Length [vars]}]]]] Regards, Ssezi
- References:
- Loop programming; how do i do this ???
- From: plzhlp <naso@live.be>
- Loop programming; how do i do this ???