38 lines
898 B
Clojure
38 lines
898 B
Clojure
(ns Range
|
|
"Elixir Range module — integer ranges.
|
|
|
|
In CljElixir: Ranges use first..last or first..last//step syntax.
|
|
(Range/new 1 10) ;=> 1..10")
|
|
|
|
(defn new
|
|
"Creates a new range.
|
|
(Range/new 1 10) ;=> 1..10
|
|
(Range/new 1 10 2) ;=> 1..10//2 (step of 2)"
|
|
([first last])
|
|
([first last step]))
|
|
|
|
(defn size
|
|
"Returns the number of elements in the range.
|
|
(Range/size (Range/new 1 10)) ;=> 10"
|
|
[range])
|
|
|
|
(defn disjoint?
|
|
"Returns true if two ranges don't overlap.
|
|
(Range/disjoint? (Range/new 1 5) (Range/new 6 10)) ;=> true"
|
|
[range1 range2])
|
|
|
|
(defn shift
|
|
"Shifts a range by `steps`.
|
|
(Range/shift (Range/new 1 5) 2) ;=> 3..7"
|
|
[range steps])
|
|
|
|
(defn split
|
|
"Splits a range at position `split`.
|
|
(Range/split (Range/new 1 5) 3) ;=> {1..3 4..5}"
|
|
[range split])
|
|
|
|
(defn to-list
|
|
"Converts range to a list.
|
|
(Range/to-list (Range/new 1 5)) ;=> [1 2 3 4 5]"
|
|
[range])
|