Range

December 15, 2017 ยท View on GitHub

Range

range 5     # {0, 1, 2, 3, 4}
range -1    # {}
range 3.4   # {0, 1, 2, 3}

range 2, 5    # {2, 3, 4}
range -1, 5   # {-1, 0, 1, 2, 3, 4}
range 1.5, 3  # {1.5, 2.5}

range 0, 10, 3       # {0, 3, 6, 9}
range -1, -2, -0.25  # {-1, -1.25, -1.5, -1.75}
range 0, 0.5, 0.1    # {0, 0.1, 0.2, 0.3, 0.4}

Note that special optimizations are performed when using range in a for loop, as long as 1-3 arguments are specified:

# temporary list not actually created because `range` is called with 1-3
# arguments:
var start = 10, stop = 10000, step = 0.001
for var v, i: range stop * 3  # does *not* create a list of 30000 items!
  say v, i
end

for var v, i: range start + 5, stop / 2
  say v, i
end

for var v, i: range start, stop, step * 3
  say v, i
end

# temporary list is created because the expression is too complicated:
for var v, i: 5 * range 5
  say v, i
end

for var v, i: (range 5) + (range 6)
  say v, i
end