Files
CljElixir/stubs/Range.clj
2026-03-09 23:09:46 -04:00

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])