# Generate nested for loops using metaprogramming?

**URL:** https://discourse.julialang.org/t/generate-nested-for-loops-using-metaprogramming/8247
**Category:** General Usage
**Tags:** question, metaprogramming
**Created:** [January 9, 2018, 3:54pm UTC](https://discourse.julialang.org/t/generate-nested-for-loops-using-metaprogramming/8247 "2018-01-09T15:54:47Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![onetonfoot](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/onetonfoot/32/2697_2.png) [@onetonfoot](https://discourse.julialang.org/u/onetonfoot)
#### Post date: [January 9, 2018, 3:54pm UTC](https://discourse.julialang.org/t/generate-nested-for-loops-using-metaprogramming/8247/1 "2018-01-09T15:54:47Z")

</div>

Given a set of characters and a number I’m trying to generate all possible sequences. For example, given  
“ACTG” to generate all possible sequences of length 2 I could do.

```julia
letters = "ACTG"

for i in letters
    for j in letters
        print(i,j," ")   
    end
end

AA AC AT AG CA CC CT CG TA TC TT TG GA GC GT GG 

```

And say n = 3 I could do

```julia
for i in letters
    for j in letters
        for k in letters        
            print(i,j,k," ")  
        end
    end
end

```

My question is how can I do this with Julia’s metaprogramming?

---

<div class="post-metadata">

### Author: ![rdeits](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rdeits/32/286_2.png) [@rdeits](https://discourse.julialang.org/u/rdeits)
#### Post date: [January 9, 2018, 4:12pm UTC](https://discourse.julialang.org/t/generate-nested-for-loops-using-metaprogramming/8247/2 "2018-01-09T16:12:27Z")

</div>

Check out `@nloops`: [https://docs.julialang.org/en/release-0.6/devdocs/cartesian/#Base.Cartesian-1](https://docs.julialang.org/en/release-0.6/devdocs/cartesian/#Base.Cartesian-1)

---

<div class="post-metadata">

### Author: ![rdeits](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rdeits/32/286_2.png) [@rdeits](https://discourse.julialang.org/u/rdeits)
#### Post date: [January 9, 2018, 4:14pm UTC](https://discourse.julialang.org/t/generate-nested-for-loops-using-metaprogramming/8247/3 "2018-01-09T16:14:21Z")

</div>

Although if you’re actually just trying to generate a product of sequences, then `Iterators.product` will be easier:

```julia
julia> for (i, j) in Iterators.product("ACTG", "ACTG")
         print(i, j, " ")
       end
AA CA TA GA AC CC TC GC AT CT TT GT AG CG TG GG

```

---

<div class="post-metadata">

### Author: ![onetonfoot](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/onetonfoot/32/2697_2.png) [@onetonfoot](https://discourse.julialang.org/u/onetonfoot)
#### Post date: [January 9, 2018, 4:20pm UTC](https://discourse.julialang.org/t/generate-nested-for-loops-using-metaprogramming/8247/4 "2018-01-09T16:20:06Z")

</div>

Thanks, that’s way simpler. I’ll have a go at solving it with @nloops for the fun anyways.

---

<div class="post-metadata">

### Author: ![onetonfoot](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/onetonfoot/32/2697_2.png) [@onetonfoot](https://discourse.julialang.org/u/onetonfoot)
#### Post date: [June 7, 2018, 3:20pm UTC](https://discourse.julialang.org/t/generate-nested-for-loops-using-metaprogramming/8247/5 "2018-06-07T15:20:39Z")

</div>

Half a year later I did it lol.

```julia
function permutations(array,n)
    exp = quote
        l = []
        @nloops $n i _ -> 1:length($array) begin
            idx =[@ntuple($n,i)...]
            push!(l,$array[idx])
        end
        l
    end
    eval(exp)
end

```
