62 lines
1.8 KiB
Markdown
62 lines
1.8 KiB
Markdown
# Range
|
|
|
|
Range is diapason between two values. Open range has at least one end open, e.g. ±∞, closed range has both ends open.
|
|
|
|
## Closed ranges
|
|
|
|
The syntax is intuitive and adopted from Kotlin:
|
|
|
|
// end inclusive:
|
|
val r = 1..5
|
|
assert(5 in r)
|
|
assert(6 !in r)
|
|
assert(0 !in r)
|
|
assert(2 in r)
|
|
>>> void
|
|
|
|
Exclusive end ranges are adopted from kotlin either:
|
|
|
|
// end inclusive:
|
|
val r = 1..<5
|
|
assert(5 !in r)
|
|
assert(6 !in r)
|
|
assert(0 !in r)
|
|
assert(2 in r)
|
|
assert(4 in r)
|
|
>>> void
|
|
|
|
In any case, we can test an object to belong to using `in` and `!in` and
|
|
access limits:
|
|
|
|
val r = 0..5
|
|
(r.end - r.start)/2
|
|
>>> 2
|
|
|
|
Notice, start and end are ints, so midpoint here is int too.
|
|
|
|
It is possible to test that one range is included in another range too,
|
|
one range is defined as _contained_ in another ifm and only if, it begin and end
|
|
are equal or within another, taking into account the end-inclusiveness:
|
|
|
|
assert( (1..3) in (1..3) )
|
|
assert( (0..3) !in (1..3) )
|
|
assert( (1..2) in (1..<3) )
|
|
assert( (1..<2) in (1..<3) )
|
|
assert( (1..<3) in (1..3) )
|
|
>>> void
|
|
|
|
|
|
# Instance members
|
|
|
|
| member | description | args |
|
|
|-----------------|----------------------------|---------------|
|
|
| contains(other) | used in `in` | Range, or Any |
|
|
| inclusiveEnd | true for '..' | Bool |
|
|
| isOpen | at any end | Bool |
|
|
| isIntRange | both start and end are Int | Bool |
|
|
| start | | Bool |
|
|
| end | | Bool |
|
|
| | | |
|
|
| | | |
|
|
| | | |
|