MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

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]}


  • Prev by Date: Re: Loop programming; how do i do this ???
  • Next by Date: Re: Linux always opening new front-end
  • Previous by thread: Re: Loop programming; how do i do this ???
  • Next by thread: Re: Loop programming; how do i do this ???