Range View Source

Defines a range.

A range represents a sequence of one or many, ascending or descending, consecutive integers.

Ranges can be either increasing (first <= last) or decreasing (first > last). Ranges are also always inclusive.

A range is represented internally as a struct. However, the most common form of creating and matching on ranges is via the ../2 macro, auto-imported from Kernel:

iex> range = 1..3
1..3
iex> first..last = range
iex> first
1
iex> last
3

A range implements the Enumerable protocol, which means functions in the Enum module can be used to work with ranges:

iex> range = 1..10
1..10
iex> Enum.reduce(range, 0, fn i, acc -> i * i + acc end)
385
iex> Enum.count(range)
10
iex> Enum.member?(range, 11)
false
iex> Enum.member?(range, 8)
true

Such function calls are efficient memory-wise no matter the size of the range. The implementation of the Enumerable protocol uses logic based solely on the endpoints and does not materialize the whole list of integers.

Link to this section Summary

Functions

Checks if two ranges are disjoint

Creates a new range

Link to this section Types

Link to this type

t() View Source
t() :: %Range{first: integer(), last: integer()}

Link to this type

t(first, last) View Source
t(first, last) :: %Range{first: first, last: last}

Link to this section Functions

Link to this function

disjoint?(arg1, arg2) View Source (since 1.8.0)
disjoint?(t(), t()) :: boolean()

Checks if two ranges are disjoint.

Examples

iex> Range.disjoint?(1..5, 6..9)
true
iex> Range.disjoint?(5..1, 6..9)
true
iex> Range.disjoint?(1..5, 5..9)
false
iex> Range.disjoint?(1..5, 2..7)
false
Link to this function

new(first, last) View Source
new(integer(), integer()) :: t()

Creates a new range.