[the link to know what I am talking 
about](http://forum.nim-lang.org///nim-lang.org/docs/tut1.html#iterators)

I was studying the tutorial part1 and when I reached this section on Iterators, 
I found that the example could be better. I would like to suggest 2 
improvements; **avoid trivial errors** and **use a different procedure name**.

In this section, the tutorial tries to define a _countup proc_ to use in a _for 
loop_, just like in the following.
    
    
    proc countup(a, b: int): int =
      var res = a
      while res <= b:
        return res
        inc(res)
    

The tutorial proceeds to say that this will never work well because this is 
uses a return(not yield). However, and this is my first point, what the readers 
will experience is not an error about returning/yielding. The error code tells 
the readers not to write a statement after a return, which is always important 
but at the same time, not essential in this context. Thus I would like to 
suggest **using an code that gives a more essential error code, or rather, does 
not give a trivial error**.

My second point focuses on what happens after the readers manage to solve this 
problem by themselves. Say, they managed to rewrite the code with something 
like:
    
    
    proc countup(a, b: int): int =
      var res = a
      while res <= b:
        result = res
        inc(res)
    

and continue the code with the following, expecting an error like "countup is a 
not an iterator but a procedure so cannot be used in a for loop" or sth else
    
    
    for i in countup(1,9)
      echo i
    

However, what awaits the reader is an output that seems to have nothing to do 
with errors. The reason is simple; the Nim compiler is cleaver enough not to 
pick the _user defined countup proc_ and to choose the _built-in count 
iterator_.

I believe that other readers will be as puzzuled as me to see a wrong code 
working without defect and at the same time, I believe that this complication 
can be avoided by **using a different proc name** such as _proc mycountup_.

What do you think about this?

Reply via email to