# »Builtin Function: range

The built-in function `range` returns a list of numbers in a range.

There are three ways to call this function:

``````range(end)
range(start, end)
range(start, end, step)
``````

The `start` is inclusive, the `end` is exclusive.

If `start` is not provided, it defaults to `0`. If `step` is not provided, it defaults to `1`.

Negative steps are permitted and count down from `start` towards `end`, instead of up.

The range ends when the next value given by the sum of the last value and `step` would exceed `end`, regardless of if it has been reached.

``````range(5)           // [0,1,2,3,4]
range(1, 5)        // [1,2,3,4] - starts at 1 instead of 0
range(1, 5, 2)     // [1,3]     - 3+2 does not satisfy r[-1] < end
range(0, -3, -1)   // [0,-1,-2] - example of negative range
``````

Impossible ranges, or ranges where `start` will never reach `end` given `step`, yield an empty list.

``````range(1, 1)        // [] - already starting at 1
range(0, 1, -1)    // [] - negative step will never reach 1
``````

Supplying an undefined value to any argument of `range` yields an undefined value back.

A range with a zero step is a runtime error.