"A possibly-empty, immutable sequence of values. The
type `Sequential<Element>` may be abbreviated
`[Element*]` or `Element[]`.
`Sequential` has two enumerated subtypes:
- `Empty`, abbreviated `[]`, represents an empty
sequence, and
- `Sequence<Element>`, abbreviated `[Element+]`
represents a non-empty sequence, and has the very
important subclass `Tuple`."
see (`class Tuple`)
shared interface Sequential<out Element>
of []|[Element+]
satisfies List<Element> &
Ranged<Integer,Element[]> &
Cloneable<Element[]> {
"Reverse this sequence, returning a new sequence."
shared actual formal Element[] reversed;
"This sequence."
shared actual default Element[] sequence => this;
"The rest of the sequence, without the first
element."
shared actual formal Element[] rest;
"Returns a sequence formed by repeating the elements of
this sequence the given number of times, or an empty
sequence if `times<=0`."
shared actual default Element[] repeat(Integer times)
=> cycle(times).sequence;
"Select the first elements of this sequence, returning
a sequence no longer than the given length. If this
sequence is shorter than the given length, return this
sequence. Otherwise return a sequence of the given
length."
shared actual default Element[] initial(Integer length)
=> this[0:length];
"Select the last elements of the sequence, returning a
sequence no longer than the given length. If this
sequence is shorter than the given length, return this
sequence. Otherwise return a sequence of the given
length."
shared actual default Element[] terminal(Integer length) {
if (exists l = lastIndex, length>0) {
return this[l-length+1..l];
}
else {
return [];
}
}
"Trim the elements satisfying the given predicate
function from the start and end of this sequence,
returning a sequence no longer than this sequence."
shared actual default Element[] trim(Boolean trimming(Element elem))
=> super.trim(trimming).sequence; //TODO: inefficient?
"Trim the elements satisfying the given predicate
function from the start of this sequence, returning
a sequence no longer than this sequence."
shared actual default Element[] trimLeading(Boolean trimming(Element elem))
=> super.trimLeading(trimming).sequence; //TODO: inefficient?
"Trim the elements satisfying the given predicate
function from the end of this sequence, returning
a sequence no longer than this sequence."
shared actual default Element[] trimTrailing(Boolean trimming(Element elem))
=> super.trimTrailing(trimming).sequence; //TODO: inefficient?
"This sequence."
shared actual default Element[] clone => this;
"A string of form `\"[ x, y, z ]\"` where `x`, `y`,
and `z` are the `string` representations of the
elements of this collection, as produced by the
iterator of the collection, or the string `\"{}\"`
if this collection is empty. If the collection
iterator produces the value `null`, the string
representation contains the string `\"null\"`."
shared actual default String string =>
empty then "[]" else "[``commaList(this)``]";
}