# What is the best way to loop a function over a list continuously in Julia?

**URL:** <https://discourse.julialang.org/t/what-is-the-best-way-to-loop-a-function-over-a-list-continuously-in-julia/86037>\
**Category:** New to Julia\
**Tags:** question\
**Created:** [August 19, 2022, 6:46pm UTC](https://discourse.julialang.org/t/what-is-the-best-way-to-loop-a-function-over-a-list-continuously-in-julia/86037 "2022-08-19T18:46:54Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![phantom](https://avatars.discourse-cdn.com/v4/letter/p/e0b2c6/32.png) [@phantom](https://discourse.julialang.org/u/phantom)\
**Post date:** [August 19, 2022, 6:46pm UTC](https://discourse.julialang.org/t/what-is-the-best-way-to-loop-a-function-over-a-list-continuously-in-julia/86037/1 "2022-08-19T18:46:54Z")

</div>

Hi this is a beginner programming question but I am trying to run a function on a list of variables repeatedly until I request that it stop. i.e.

```julia
list = [A,B,C]  

function(A)
function(B)
function(C)
function(A)
function(B)...

```

I was wondering if there was a better way to do it than the clunky solution I came up with.

```julia
list = [A, B, C] 
function runfunc(list)
    cont = Ref(true)
    k = 1  
    @async while cont[] 
        function(list[k])
        if k <3
           k+= 1
        elif k == 3 
           k =0
        end
    end
    return(cont) 
end    

```

is this the correct way to approach this in Julia? is there a better way to start the loop over again without having to go through a test for conditions? Any corrections/ insights would be appreciated thanks!

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [August 19, 2022, 7:16pm UTC](https://discourse.julialang.org/t/what-is-the-best-way-to-loop-a-function-over-a-list-continuously-in-julia/86037/2 "2022-08-19T19:16:29Z")

</div>

for the specifics of the counter, you can do:

```julia
k = 0
while cont[]
    k += 1
    f(list[k%3 + 1])
end

```

to run that continously you can do something like:

```julia
julia> const stop = Ref(false);

julia> function run()
           global stop
           k = 0
           @async while !stop[]
               k += 1 
               print('.')
               sleep(5)
           end
       end
run (generic function with 1 method)

```

(not sure if I’m helping)

---

<div class="post-metadata">

**Author:** ![digital\_carver](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/digital_carver/32/33818_2.png) [@digital\_carver](https://discourse.julialang.org/u/digital_carver)\
**Post date:** [August 19, 2022, 7:36pm UTC](https://discourse.julialang.org/t/what-is-the-best-way-to-loop-a-function-over-a-list-continuously-in-julia/86037/3 "2022-08-19T19:36:17Z")

</div>

```julia
help?> Iterators.cycle
  cycle(iter)

  An iterator that cycles through iter forever. If iter is empty, so is cycle(iter).

```

```julia
list = [A, B, C] 
function runfunc(list)
  cont = Ref(true)

  @async for listitem in Iterators.cycle(list)
    cont[] || break
    myfunction(listitem)
  end
  return(cont) 
end

```

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [August 19, 2022, 8:59pm UTC](https://discourse.julialang.org/t/what-is-the-best-way-to-loop-a-function-over-a-list-continuously-in-julia/86037/4 "2022-08-19T20:59:59Z")

</div>

> [@lmiq](#):
>
> ```julia
> k = 0
> while cont[]
> k += 1
> f(list[k%3 + 1])
> end
> 
> ```

A more bug-resistant option is

```julia
f(list[mod1(k, 3)])

```

---

<div class="post-metadata">

**Author:** ![phantom](https://avatars.discourse-cdn.com/v4/letter/p/e0b2c6/32.png) [@phantom](https://discourse.julialang.org/u/phantom)\
**Post date:** [August 19, 2022, 11:22pm UTC](https://discourse.julialang.org/t/what-is-the-best-way-to-loop-a-function-over-a-list-continuously-in-julia/86037/5 "2022-08-19T23:22:55Z")

</div>

Wow! thanks to everyone for the amazing suggestions. Modulo works great. What exactly is Julia doing in the line `cont[] || break` in @digital_carver’s code? Is there somewhere I can find out more about that? Is that a shorthand form of an if, elif statement?

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [August 20, 2022, 12:27am UTC](https://discourse.julialang.org/t/what-is-the-best-way-to-loop-a-function-over-a-list-continuously-in-julia/86037/6 "2022-08-20T00:27:03Z")

</div>

> [@phantom](#):
>
> cont || break

```julia
if cond[] break end

```

You can search for the meaning of the operator typing `? ||` in the repl

---

<div class="post-metadata">

**Author:** ![digital\_carver](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/digital_carver/32/33818_2.png) [@digital\_carver](https://discourse.julialang.org/u/digital_carver)\
**Post date:** [August 20, 2022, 1:29am UTC](https://discourse.julialang.org/t/what-is-the-best-way-to-loop-a-function-over-a-list-continuously-in-julia/86037/7 "2022-08-20T01:29:27Z")

</div>

[https://docs.julialang.org/en/v1/manual/control-flow/#Short-Circuit-Evaluation](https://docs.julialang.org/en/v1/manual/control-flow/#Short-Circuit-Evaluation)
