@erik thank you. I know of Base.Cartesian, but I was not able to make it 
work for my use case. 

@steven yes, that is what i was afraid of (I was trying to shy away from 
recursion). 

On Monday, September 28, 2015 at 8:23:48 PM UTC+2, Erik Schnetter wrote:
>
> Guiseppe
>
> In addition to using recursion, you can also use a macro to generate the 
> code.
>
> However, this functionality is available in the "Cartesian" module which 
> is part of Base Julia. You are probably looking for "@nloops".
>
> -erik
>
>
> On Mon, Sep 28, 2015 at 11:24 AM, Giuseppe Ragusa <giusepp...@gmail.com 
> <javascript:>> wrote:
>
>> I am having problems (serious problems!) to deal with algorithms that 
>> boil down do nested for loops but whose number of loops is not known at 
>> compile time. As an example consider this:
>>
>> ```
>>  function tmp()
>>      r = 3
>>      n = 100
>>      λ = zeros(r)
>>      u = rand(n, r)
>>      counter = 0
>>      Y = Array(Float64, n)
>>
>>      @inbounds for j_1 = 0:k
>>          
>>          for i = 1:n
>>              Y[i] = pow(u[i, 1], j_1)
>>          end
>>          
>>          λ[1] = j_1
>>          for j_2 = 0:(k-j_1)
>>              λ[2] = j_2
>>              for i = 1:n
>>                  Y[i] *= pow(u[i, 2], j_2)
>>              end
>>              
>>              for j_3 = 0:(k-j_1-j_2)
>>                  λ[3] = j_3
>>                  for i = 1:n
>>                      Y[i] *= pow(u[i, 3], j_3)
>>                  end
>>                  counter += 1
>>                  println(λ, " ", " => ", j_1, j_2, j_3, " counter =>", 
>> counter)
>>              end
>>          end
>>      end
>>  end
>>  ```
>>
>> This is what I want when `r = 3`. For larger `r = 4` there would be an 
>> additional loop. etc. Now, everything is complicated by the fact that `r` 
>> is not know at compile time. 
>>
>> I have tried to generate the loops using the macros in  Base.Cartesian 
>> and then using generated functions to accomplish what I want, but I cannot 
>> get what I want. The main difficulty is that Base.Cartesian I can't get the 
>> ranges I want). 
>>
>> Does anybody have suggestions on how to deal with this?
>>
>>
>>
>
>
> -- 
> Erik Schnetter <schn...@gmail.com <javascript:>> 
> http://www.perimeterinstitute.ca/personal/eschnetter/
>

Reply via email to