View Source Range (Elixir v1.11.0)
Ranges represent 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
Link to this section Types
@type t(first, last) :: %Range{first: first, last: last}