lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


> On Jan 17, 2019, at 12:44 AM, Dirk Laurie <dirk.laurie@gmail.com> wrote:
> 
> Put all the clever tricks in a function 'loop' and use the generic for:
> 
>   for v in loop(e1,e2,e3) do

Like this ? 

> function loop(e1,e2,e3)
>>     local i, n = -1, math.floor((e2-e1)/e3)
>>     if e1 + n * e3 == e2 then n = n+1 end
>>     return function()
>>         i = i + 1
>>         if i < n then return e1 + i*e3 end
>>     end
>> end
>
> for k in loop(1,2,1/6) do print(k) end
1.0
1.1666666666667
1.3333333333333
1.5
1.6666666666667
1.8333333333333
2.0

Avoiding accumulated steps rounding error also work:

> for k = 6,12 do print(k/6) end
1.0
1.1666666666667
1.3333333333333
1.5
1.6666666666667
1.8333333333333
2.0
>