# Non-collecting iteration (one-liner for)

**URL:** <https://discourse.julialang.org/t/non-collecting-iteration-one-liner-for/925>\
**Category:** Internals & Design\
**Tags:** proposal\
**Created:** [December 13, 2016, 4:41pm UTC](https://discourse.julialang.org/t/non-collecting-iteration-one-liner-for/925 "2016-12-13T16:41:29Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [December 13, 2016, 4:41pm UTC](https://discourse.julialang.org/t/non-collecting-iteration-one-liner-for/925/1 "2016-12-13T16:41:29Z")

</div>

Looking at source code in `Base` I notice a lot of one liners that look like this:

```julia
for i in 1:n; do_something(i) end

```

and a rarer

```julia
for ignored_index in 1:n; do_this_n_times() end

```

A simple `grep 'for.*end' **/*.jl` gives 150 matches on current master. In 39 cases, there is a `;` before the `end`. I wonder if it would make sense to have a one-liner syntax equivalent to `for`. Perhaps analogously to a comprehension syntax, eg

```julia
Void[do_this_and_dont_collect(i) for i in 1:n]

```

Similarly, there is no equivalent of `COMMON-LISP:MAPC` for more functional style.

I found this older, somewhat related issue:  
[https://github.com/JuliaLang/julia/issues/1657](https://github.com/JuliaLang/julia/issues/1657)

---

<div class="post-metadata">

**Author:** ![nalimilan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nalimilan/32/147_2.png) [@nalimilan](https://discourse.julialang.org/u/nalimilan)\
**Post date:** [December 13, 2016, 5:11pm UTC](https://discourse.julialang.org/t/non-collecting-iteration-one-liner-for/925/2 "2016-12-13T17:11:59Z")

</div>

We have `foreach` since 0.5 for this purpose.

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [December 13, 2016, 6:56pm UTC](https://discourse.julialang.org/t/non-collecting-iteration-one-liner-for/925/3 "2016-12-13T18:56:09Z")

</div>

@nalimilan: good point, I haven’t thought of that. So disregard the part about `mapc`, but an iterator-based version would be nice.

---

<div class="post-metadata">

**Author:** ![mbauman](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbauman/32/31082_2.png) [@mbauman](https://discourse.julialang.org/u/mbauman)\
**Post date:** [December 13, 2016, 7:21pm UTC](https://discourse.julialang.org/t/non-collecting-iteration-one-liner-for/925/4 "2016-12-13T19:21:59Z")

</div>

You can use generators for this:

```julia
julia> iterate(itr) = (for x in itr; end)
iterate (generic function with 1 method)

julia> iterate(println(x^2) for x in 1:10)
1
4
9
16
25
36
49
64
81
100

```
