»
array
array
Type Parameters
Functions
convert a Sequence's head into a 3-tuple.
ex.
[1,2,3,4,5].as_3tuple produces (1,2,3)
[1,2,3].as_3tuple produces (1,2,3)
[1,2].as_3tuple breaks the pre condition
[1].as_3tuple breaks the pre condition
[].as_3tuple breaks the pre condition
ex.
[1,2,3,4,5].as_3tuple produces (1,2,3)
[1,2,3].as_3tuple produces (1,2,3)
[1,2].as_3tuple breaks the pre condition
[1].as_3tuple breaks the pre condition
[].as_3tuple breaks the pre condition
chop this Sequence into tuples of size 3. In case
the number of elements is not a multiple of 3,
the last count % 3 elements will be dropped silently.
ex.
[1,2,3,4,5,6,7].tuples3 produces [(1,2,3),(4,5,6)]
the number of elements is not a multiple of 3,
the last count % 3 elements will be dropped silently.
ex.
[1,2,3,4,5,6,7].tuples3 produces [(1,2,3),(4,5,6)]
convert a Sequence's head into a 4-tuple.
ex.
[1,2,3,4,5].as_4tuple produces (1,2,3,4)
[1,2,3,4].as_4tuple produces (1,2,3,4)
[1,2,3].as_4tuple breaks the pre condition
[1,2].as_4tuple breaks the pre condition
[1].as_4tuple breaks the pre condition
[].as_4tuple breaks the pre condition
ex.
[1,2,3,4,5].as_4tuple produces (1,2,3,4)
[1,2,3,4].as_4tuple produces (1,2,3,4)
[1,2,3].as_4tuple breaks the pre condition
[1,2].as_4tuple breaks the pre condition
[1].as_4tuple breaks the pre condition
[].as_4tuple breaks the pre condition
§
§
chop this Sequence into tuples of size 4. In case
the number of elements is not a multiple of 4,
the last count % 4 elements will be dropped silently.
ex.
[1,2,3,4,5].tuples4 produces [(1,2,3,4)]
the number of elements is not a multiple of 4,
the last count % 4 elements will be dropped silently.
ex.
[1,2,3,4,5].tuples4 produces [(1,2,3,4)]
convert a Sequence's head into a 5-tuple.
ex.
[1,2,3,4,5,6].as_5tuple produces (1,2,3,4,5)
[1,2,3,4,5].as_5tuple produces (1,2,3,4,5)
[1,2,3,4].as_5tuple breaks the pre condition
[1,2,3].as_5tuple breaks the pre condition
...
[].as_5tuple breaks the pre condition
ex.
[1,2,3,4,5,6].as_5tuple produces (1,2,3,4,5)
[1,2,3,4,5].as_5tuple produces (1,2,3,4,5)
[1,2,3,4].as_5tuple breaks the pre condition
[1,2,3].as_5tuple breaks the pre condition
...
[].as_5tuple breaks the pre condition
chop this Sequence into tuples of size 5. In case
the number of elements is not a multiple of 5,
the last count % 5 elements will be dropped silently.
ex.
[1,2,3,4,5,6].tuples5 produces [(1,2,3,4,5)]
the number of elements is not a multiple of 5,
the last count % 5 elements will be dropped silently.
ex.
[1,2,3,4,5,6].tuples5 produces [(1,2,3,4,5)]
convert a Sequence's head into a 6-tuple.
ex.
[1,2,3,4,5,6,7].as_6tuple produces (1,2,3,4,5,6)
[1,2,3,4,5,6].as_6tuple produces (1,2,3,4,5,6)
[1,2,3,4,5].as_6tuple breaks the pre condition
[1,2,3,4].as_6tuple breaks the pre condition
...
[].as_6tuple breaks the pre condition
ex.
[1,2,3,4,5,6,7].as_6tuple produces (1,2,3,4,5,6)
[1,2,3,4,5,6].as_6tuple produces (1,2,3,4,5,6)
[1,2,3,4,5].as_6tuple breaks the pre condition
[1,2,3,4].as_6tuple breaks the pre condition
...
[].as_6tuple breaks the pre condition
chop this Sequence into tuples of size 6. In case
the number of elements is not a multiple of 6,
the last count % 6 elements will be dropped silently.
ex.
[1,2,3,4,5,6,7].tuples6 produces [(1,2,3,4,5,6)]
the number of elements is not a multiple of 6,
the last count % 6 elements will be dropped silently.
ex.
[1,2,3,4,5,6,7].tuples6 produces [(1,2,3,4,5,6)]
collect the contents of this Sequence into an array
create an array backed version of this sequence in case this is not array
backed. This will ensure that operations like index[] or drop perform
in constant time.
returns Sequence.this if is_array_backed.
backed. This will ensure that operations like index[] or drop perform
in constant time.
returns Sequence.this if is_array_backed.
wrap this sequence into an equatable type.
This requires the underlying element type to be equatable.
This requires the underlying element type to be equatable.
create a list from this array
create a list from this array starting at the given index
§(LM type:mutate) => container.abstract_array.as_mutable.LM.array container.abstract_array.T [Inherited from abstract_array]
§
(LM
type
:
mutate) =>
container.abstract_array.as_mutable.LM.array container.abstract_array.T [Inherited from abstract_array]
returns a copy of this array as a mutable array
wrap this sequence into an orderable type.
This requires the underlying element type to be orderable.
An empty `Sequence` is always less or equal to any other `Sequence`. Two non
empty `Sequence`s whose first elements are unequal are ordered by the
order of those two elements. If those two elements are equal, the tail
of both `Sequence`s will be used to find the order.
This requires the underlying element type to be orderable.
An empty `Sequence` is always less or equal to any other `Sequence`. Two non
empty `Sequence`s whose first elements are unequal are ordered by the
order of those two elements. If those two elements are equal, the tail
of both `Sequence`s will be used to find the order.
create a string representation of this Sequence including all the string
representations of its contents, separated by ',' and enclosed in '['
and ']'.
In case this Sequence is known to be `finite` or has at most (Sequence T).type
.AS_STRING_NON_FINITE_MAX_ELEMENTS elements, all elements will be shown in the
resulting string. Otherwise, only the first elements will be shown followed by
",…" as in "[1,2,3,4,5,6,7,8,9,10,…]".
To force printing of all elements of a finite `Sequence` for which `finite` is
false (which may be the case since a Sequence in general might not know that it
if finite), you may use `as_string_all`.
representations of its contents, separated by ',' and enclosed in '['
and ']'.
In case this Sequence is known to be `finite` or has at most (Sequence T).type
.AS_STRING_NON_FINITE_MAX_ELEMENTS elements, all elements will be shown in the
resulting string. Otherwise, only the first elements will be shown followed by
",…" as in "[1,2,3,4,5,6,7,8,9,10,…]".
To force printing of all elements of a finite `Sequence` for which `finite` is
false (which may be the case since a Sequence in general might not know that it
if finite), you may use `as_string_all`.
create a string representation of this Sequence including all the string
representations of its contents, separated by 'sep'.
NOTE: In case this Sequence is not finite, this will attempt to create an
infinitely long string resulting in failure due to resource exhaustion.
representations of its contents, separated by 'sep'.
NOTE: In case this Sequence is not finite, this will attempt to create an
infinitely long string resulting in failure due to resource exhaustion.
create a string representation of this Sequence including all the string
representations of its contents, separated by ", " and enclosed in '['
and ']'.
NOTE: In case this Sequence is not finite, this will attempt to create an
infinitely long string resulting in failure due to resource exhaustion.
representations of its contents, separated by ", " and enclosed in '['
and ']'.
NOTE: In case this Sequence is not finite, this will attempt to create an
infinitely long string resulting in failure due to resource exhaustion.
call 'as_string' on the elements
convert a Sequence's head into a 2-tuple.
ex.
[1,2,3,4,5].as_tuple produces (1,2)
[1,2].as_tuple produces (1,2)
[1].as_tuple breaks the pre condition
[].as_tuple breaks the pre condition
ex.
[1,2,3,4,5].as_tuple produces (1,2)
[1,2].as_tuple produces (1,2)
[1].as_tuple breaks the pre condition
[].as_tuple breaks the pre condition
chop this Sequence into tuples of size 2. In case
the number of elements is not a multiple of 2,
the last count % 2 elements will be dropped silently.
ex.
[1,2,3,4,5].tuples produces [(1,2),(3,4)]
the number of elements is not a multiple of 2,
the last count % 2 elements will be dropped silently.
ex.
[1,2,3,4,5].tuples produces [(1,2),(3,4)]
the arithmetic mean of the sequence
https://en.wikipedia.org/wiki/Arithmetic_mean
https://en.wikipedia.org/wiki/Arithmetic_mean
create a new list that contains the first elements of
this Sequence for which 'f e' is false
this Sequence for which 'f e' is false
chop this Sequence into chunks of `chunk_size`.
the last chunk may be smaller than `chunk_size`.
the last chunk may be smaller than `chunk_size`.
§
§
create a new Sequence from the result of applying 'f' to the
elements all combinations of elements of this Sequence and
all elements of 'b' iterating of 'b' repeatedly as follows
Sequence.this[0] , b[0]
Sequence.this[0] , b[1]
Sequence.this[0] , b[2]
Sequence.this[0] , ...
Sequence.this[0] , b.last
Sequence.this[1] , b[0]
Sequence.this[1] , b[1]
Sequence.this[1] , ...
... , ...
Sequence.this.last, b.last
elements all combinations of elements of this Sequence and
all elements of 'b' iterating of 'b' repeatedly as follows
Sequence.this[0] , b[0]
Sequence.this[0] , b[1]
Sequence.this[0] , b[2]
Sequence.this[0] , ...
Sequence.this[0] , b.last
Sequence.this[1] , b[0]
Sequence.this[1] , b[1]
Sequence.this[1] , ...
... , ...
Sequence.this.last, b.last
create a Sequence that consists of all the elements of this Sequence followed
by all the elements of s
General case: This will perform `as_list.concat_list` in case one of
`Sequence.this` or `s`is not known to be finite (`finite != trit.yet`) or
`s.count` is larger than `count`.
Otherwise, if `Sequence.this` or `s` is empty, the result will be `s` or
`Sequence.this`, respectively.
In all other cases, an instance of `container.expanding_array` will be
created and the elements of `this` and `s` will be added. Note that
`concat` is redefined for `container.expanding_array` to achieve
average `O(1)` performance for repeated concatenation with `s.count < c`
for some constant `c`.
Performance: O(count + s.count) worst case, O(s.count) average case
NOTE: For repeated concatenation `a.concat b` that fall into the general
case the resulting sequence will have iteration performance in `O(n²)`
for `n` concatenation. Explicitly use `container.expanding_array` to
avoid this. This implementation cannot do this automatically since
repeated wrapping of `a` into an `expanding_array` would result
in `O(n²)` performance for the concatenations.
by all the elements of s
General case: This will perform `as_list.concat_list` in case one of
`Sequence.this` or `s`is not known to be finite (`finite != trit.yet`) or
`s.count` is larger than `count`.
Otherwise, if `Sequence.this` or `s` is empty, the result will be `s` or
`Sequence.this`, respectively.
In all other cases, an instance of `container.expanding_array` will be
created and the elements of `this` and `s` will be added. Note that
`concat` is redefined for `container.expanding_array` to achieve
average `O(1)` performance for repeated concatenation with `s.count < c`
for some constant `c`.
Performance: O(count + s.count) worst case, O(s.count) average case
NOTE: For repeated concatenation `a.concat b` that fall into the general
case the resulting sequence will have iteration performance in `O(n²)`
for `n` concatenation. Explicitly use `container.expanding_array` to
avoid this. This implementation cannot do this automatically since
repeated wrapping of `a` into an `expanding_array` would result
in `O(n²)` performance for the concatenations.
count the number of elements in this Sequence that match the
given predicate. Note that this typically
runs forever if executed on an endless list.
given predicate. Note that this typically
runs forever if executed on an endless list.
redefines Sequence.count for array,
reducing complexity from O(n) to O(1).
reducing complexity from O(n) to O(1).
get the number of non-overlapping matches of l within this
get the number of matches of l
create a list that repeats the current Sequence indefinitely. In case 'Sequence.this'
is empty, returns 'nil'
is empty, returns 'nil'
filter out consecutive duplicate elements.
Keep the order of elements unchanged.
ex.
[1,2,2,3,2,2,2,4].dedup = [1,2,3,2,4]
Keep the order of elements unchanged.
ex.
[1,2,2,3,2,2,2,4].dedup = [1,2,3,2,4]
filter out consecutive duplicate elements using the
given relation.
Keep the order of elements unchanged.
ex.
[4,2,2,6,2,1,2,4].dedup (a,b -> a%2=b%2) = [4,1,2]
[4,2,2,6,2,1,2,4].dedup (<=) = [4,2,1]
given relation.
Keep the order of elements unchanged.
ex.
[4,2,2,6,2,1,2,4].dedup (a,b -> a%2=b%2) = [4,1,2]
[4,2,2,6,2,1,2,4].dedup (<=) = [4,2,1]
create a list that consists of the elements of this Sequence except the first
n elements
For arrays, this has performance in O(1).
n elements
For arrays, this has performance in O(1).
Lazily drop the first elements of this Sequence for which predicate 'p' holds.
Get the dynamic type of this instance. For value instances `x`, this is
equal to `type_of x`, but for `x` with a `ref` type `x.dynamic_type` gives
the actual runtime type, while `type_of x` results in the static
compile-time type.
There is no dynamic type of a type instance since this would result in an
endless hierarchy of types. So for Type values, dynamic_type is redefined
to just return Type.type.
equal to `type_of x`, but for `x` with a `ref` type `x.dynamic_type` gives
the actual runtime type, while `type_of x` results in the static
compile-time type.
There is no dynamic type of a type instance since this would result in an
endless hierarchy of types. So for Type values, dynamic_type is redefined
to just return Type.type.
get a list of tuples of indices and elements in this array
the euclidean norm of this sequence
i.e. the square of the sum of squares of this sequence
i.e. the square of the sum of squares of this sequence
filter elements using predicate f
values for which f is false are dropped
values for which f is false are dropped
get the index of pattern within this Sequence or nil if it does not exist
uses the Knuth-Morris-Pratt algorithm
port of racket code from this paper:
https://www.cambridge.org/core/services/aop-cambridge-core/content/view/8EFA77D663D585B68630E372BCE1EBA4/S0956796824000017a.pdf/knuth-morris-pratt-illustrated.pdf
worst-case performance: O( seq_length ) + O( pattern_length )
worst-case space complexity: O( pattern_length )
uses the Knuth-Morris-Pratt algorithm
port of racket code from this paper:
https://www.cambridge.org/core/services/aop-cambridge-core/content/view/8EFA77D663D585B68630E372BCE1EBA4/S0956796824000017a.pdf/knuth-morris-pratt-illustrated.pdf
worst-case performance: O( seq_length ) + O( pattern_length )
worst-case space complexity: O( pattern_length )
is this sequence known to be finite? For infinite sequences, features like
count diverge.
count diverge.
get the first element of this Sequence
get the first element of this Sequence or default if sequence is empty
map each element of this Sequence to Sequence
Then flatten the result by one level,
essentially combining all the sequences.
Then flatten the result by one level,
essentially combining all the sequences.
§
§
fold the elements of this array using the given monoid.
e.g., to sum the elements of an array of i32, use a.fold i32.sum
e.g., to sum the elements of an array of i32, use a.fold i32.sum
§(i i32, s container.abstract_array.T, m Monoid container.abstract_array.T) => container.abstract_array.T [Inherited from abstract_array]
§
(i i32, s container.abstract_array.T, m Monoid container.abstract_array.T)
=>
container.abstract_array.T [Inherited from abstract_array]
fold the elements of this array using the given monoid and initial value
Used to fold an array tail-recursively
Used to fold an array tail-recursively
fold the elements of this non-empty Sequence using the given function
e.g., to find the minimum of a Sequence of i32, use `s.fold1 (<=)`
e.g., to find the minimum of a Sequence of i32, use `s.fold1 (<=)`
fold the elements of this Sequence using the given function and initial
value.
In case this Sequence is empty, the result is `e`.
e.g., to find the product of a Sequence of i32, use `s.foldf (*) 1`
value.
In case this Sequence is empty, the result is `e`.
e.g., to find the product of a Sequence of i32, use `s.foldf (*) 1`
fold the elements of this list using the given monoid right-to-left.
e.g., to concat the elements of a list of String, use l.foldr String.concat
e.g., to concat the elements of a list of String, use l.foldr String.concat
fold the elements of this list using the given monoid and initial value right-to-left.
Used to fold a list tail-recursively
Used to fold a list tail-recursively
fold the elements of this non-empty list using the given function right-to-left
e.g., to concat the elements of a non-empty list of lists, use foldr1 (++)
e.g., to concat the elements of a non-empty list of lists, use foldr1 (++)
fold the elements of this list using the given function right-to-left.
e.g., to concat the elements of a list of lists, use foldrf (++) []
e.g., to concat the elements of a list of lists, use foldrf (++) []
apply f to all elements in this array
apply 'f' to each element 'e' as long as 'f e'
§(K type:property.orderable, B type, key_f Unary K Sequence.T, f Unary B Sequence.T) => container.Map K (Sequence B) [Inherited from Sequence]
§
(K
type
:
property.orderable, B type
, key_f Unary K Sequence.T, f Unary B Sequence.T) =>
container.Map K (Sequence B) [Inherited from Sequence]
group the elements of this sequence by a key of type and applies function f to all elements
example: group characters by category and add underscores around each character
values array codepoint := ["A", "1", "b", "?", "X", "4"]
classify (c codepoint) String => c.is_ascii_letter ? "letter" : c.is_ascii_digit ? "digit" : "other"
values.group_map String String classify (x->"_{x}_")
=> {(digit => [_1_, _4_]), (letter => [_A_, _b_, _X_]), (other => [_?_])}
example: group characters by category and add underscores around each character
values array codepoint := ["A", "1", "b", "?", "X", "4"]
classify (c codepoint) String => c.is_ascii_letter ? "letter" : c.is_ascii_digit ? "digit" : "other"
values.group_map String String classify (x->"_{x}_")
=> {(digit => [_1_, _4_]), (letter => [_A_, _b_, _X_]), (other => [_?_])}
§(K type:property.orderable, B type, key_f Unary K Sequence.T, f Unary B Sequence.T, reduce_f Binary B B B) => container.Map K B [Inherited from Sequence]
§
(K
type
:
property.orderable, B type
, key_f Unary K Sequence.T, f Unary B Sequence.T, reduce_f Binary B B B) =>
container.Map K B [Inherited from Sequence]
group elements using key_f and
reduce elements within a group by first applying f and then using reduce_f to reduce
example: count occurrences of letters, numbers and other characters
values array codepoint := ["A", "1", "b", "?", "X", "4"]
classify (c codepoint) String => c.is_ascii_letter ? "letter" : c.is_ascii_digit ? "digit" : "other"
values.group_map_reduce String i32 classify (_->1) (+)
=> {(digit => 2), (letter => 3), (other => 1)}
reduce elements within a group by first applying f and then using reduce_f to reduce
example: count occurrences of letters, numbers and other characters
values array codepoint := ["A", "1", "b", "?", "X", "4"]
classify (c codepoint) String => c.is_ascii_letter ? "letter" : c.is_ascii_digit ? "digit" : "other"
values.group_map_reduce String i32 classify (_->1) (+)
=> {(digit => 2), (letter => 3), (other => 1)}
§(K type:property.orderable, key_f Unary K Sequence.T, reduce_f Binary Sequence.T Sequence.T Sequence.T) => container.Map K Sequence.T [Inherited from Sequence]
§
(K
type
:
property.orderable, key_f Unary K Sequence.T, reduce_f Binary Sequence.T Sequence.T Sequence.T) =>
container.Map K Sequence.T [Inherited from Sequence]
group elements using key_f and reduce elements within a group using reduce_f
in contrast to the more general version, values in the resulting map must have the same type as in the input
example: sum even and odd numbers individually
(0..10).group_reduce String (x -> x%%2 ? "even" : "odd") (+)
=> {(even => 30), (odd => 25)}
in contrast to the more general version, values in the resulting map must have the same type as in the input
example: sum even and odd numbers individually
(0..10).group_reduce String (x -> x%%2 ? "even" : "odd") (+)
=> {(even => 30), (odd => 25)}
get a function that, given an index, returns the element at that index
get the contents of this array at the given index
determine the index of element x within this list. 0 if x is at the
head of the list, 1 if it comes directly after head, etc. nil if x is
not in the list.
head of the list, 1 if it comes directly after head, etc. nil if x is
not in the list.
adds the corresponding index to
every element in the sequence
every element in the sequence
§
§
adds an index to every element
in the sequence starting at start_idx
in the sequence starting at start_idx
a sequence of all valid indices to access this array. Useful e.g., for
`for`-loops:
for i in arr.indices do
`for`-loops:
for i in arr.indices do
consume all elements of this Sequence by f. This is an infix operator alias
for for_each.
Ex.: To print all the elements of a list, you can use
1..10 ! say
for for_each.
Ex.: To print all the elements of a list, you can use
1..10 ! say
filter elements using predicate f, infix operator
synonym of filter.
NYI: What is better, 'infix |&' or 'infix &', or something else?
synonym of filter.
NYI: What is better, 'infix |&' or 'infix &', or something else?
infix operand synonym for concat
map the Sequence to a new Sequence applying function f to all elements
This is an infix operator alias of map enabling piping code like
l := 1..10 | *10 | 300-
to obtain 290,280,270,...200
Note that map and therefore also this operator is lazy, so
_ := (1..10 | say)
will not print anything while
(1..10 | say).for_each _->unit
will print the elements since `for_each` is not lazy.
This is an infix operator alias of map enabling piping code like
l := 1..10 | *10 | 300-
to obtain 290,280,270,...200
Note that map and therefore also this operator is lazy, so
_ := (1..10 | say)
will not print anything while
(1..10 | say).for_each _->unit
will print the elements since `for_each` is not lazy.
filter elements using predicate f, infix operator
synonym of filter.
synonym of filter.
check if predicate f holds for all elements
check if predicate f holds for at least one element
insert element v at position at
apply transducer to sequence, returning a sequence of results
example usage:
human(age i32) is
ages := map (Sequence i32) human i32 (x -> x.age)
gt_ten := filter (Sequence i32) i32 (x -> x > 10)
xf := ages ∘ gt_ten
say ([human(4), human(12), human(30)].into xf) # [12,30]
example usage:
human(age i32) is
ages := map (Sequence i32) human i32 (x -> x.age)
gt_ten := filter (Sequence i32) i32 (x -> x > 10)
xf := ages ∘ gt_ten
say ([human(4), human(12), human(30)].into xf) # [12,30]
is this Sequence known to be array backed? If so, this means that operations
like index[] are fast.
like index[] are fast.
check if argument is a valid index in this array.
Unlike for general Sequences, this performs in O(1).
Unlike for general Sequences, this performs in O(1).
get the last element of this Sequence
This may take time in O(count), in particular, it may not terminate
for an infinite Sequence.
This may take time in O(count), in particular, it may not terminate
for an infinite Sequence.
get the last element of this Sequence or default if sequence is empty
the length of the array
map the Sequence to a new Sequence applying function f to all elements
This performs a lazy mapping, f is called only when the elements
in the resulting list are accessed.
This performs a lazy mapping, f is called only when the elements
in the resulting list are accessed.
§
§
variant of map which additionally passes the index to
the mapping function f
the mapping function f
Map this Sequence to f applied to neighboring pairs of values
in this Sequence.
In case this Sequence has less than two elements, the result will
be the empty list.
ex. to obtain a list of differences you, you may use `map_pairs (-)`:
[2,3,5,7,11,13,17,19,23,29].map_pairs a,b->b-a
results in `[1,2,2,4,2,4,2,4,6]`
in this Sequence.
In case this Sequence has less than two elements, the result will
be the empty list.
ex. to obtain a list of differences you, you may use `map_pairs (-)`:
[2,3,5,7,11,13,17,19,23,29].map_pairs a,b->b-a
results in `[1,2,2,4,2,4,2,4,6]`
§
§
map the array to a new array applying function f to all elements
maximum value in the sequence
the median of the sequence
https://en.wikipedia.org/wiki/Median
https://en.wikipedia.org/wiki/Median
minimum value in the sequence
the nth element in the sequence if it exists, wrapped in an option,
nil otherwise.
Complexity: if Sequence is array backed O(1) otherwise O(n)
nil otherwise.
Complexity: if Sequence is array backed O(1) otherwise O(n)
create a new Sequence from tuples of all combinations of elements
of this Sequence and all elements of 'b' iterating of 'b' repeatedly
as follows
(Sequence.this[0] , b[0] )
(Sequence.this[0] , b[1] )
(Sequence.this[0] , b[2] )
(Sequence.this[0] , ... )
(Sequence.this[0] , b.last)
(Sequence.this[1] , b[0] )
(Sequence.this[1] , b[1] )
(Sequence.this[1] , ... )
(... , ... )
(Sequence.this.last, b.last)
of this Sequence and all elements of 'b' iterating of 'b' repeatedly
as follows
(Sequence.this[0] , b[0] )
(Sequence.this[0] , b[1] )
(Sequence.this[0] , b[2] )
(Sequence.this[0] , ... )
(Sequence.this[0] , b.last)
(Sequence.this[1] , b[0] )
(Sequence.this[1] , b[1] )
(Sequence.this[1] , ... )
(... , ... )
(Sequence.this.last, b.last)
calls `f` for element in the Sequence.
Unlike `for_each` this returns itself
allowing easier composition with
other Sequence features.
example:
[1,2,3,4,5]
.filter is_prime
.peek say
.drop_while <10
Unlike `for_each` this returns itself
allowing easier composition with
other Sequence features.
example:
[1,2,3,4,5]
.filter is_prime
.peek say
.drop_while <10
convenience prefix operator to create a string from a value.
This permits usage of `$` as a prefix operator in a similar way both
inside and outside of constant strings: $x and "$x" will produce the
same string.
This permits usage of `$` as a prefix operator in a similar way both
inside and outside of constant strings: $x and "$x" will produce the
same string.
generic product of the elements of a Sequence of numeric.
This allows multiplying the elements of a list, as in
l := [1,2,3]
say <| l.product # '6'
This allows multiplying the elements of a list, as in
l := [1,2,3]
say <| l.product # '6'
create a new array with element i set to v. Grow the array in case i == length.
Complexity: O(array.this.length)
Complexity: O(array.this.length)
create a new array with element i set to v. Grow the array in case i >= length.
New array elements at indices array.this.length..i-1 will be set to z.
Complexity: O(max(i, array.this.length))
New array elements at indices array.this.length..i-1 will be set to z.
Complexity: O(max(i, array.this.length))
reduce this Sequence to R with an initial value init
and a reducing function f.
the reduction is finished once f yields abort or
if the end of the sequence is reached.
and a reducing function f.
the reduction is finished once f yields abort or
if the end of the sequence is reached.
§(R type, init R, f Binary (choice R (abort (outcome R))) R Sequence.T) => outcome R [Inherited from Sequence]
§
(R
type
, init R, f Binary (choice R (abort (outcome R))) R Sequence.T) =>
outcome R [Inherited from Sequence]
reduce this Sequence to `outcome R`
with an initial value `init` and a reducing function `f`.
the reduction is finished once `f` yields `abort` or
if the end of the sequence is reached.
with an initial value `init` and a reducing function `f`.
the reduction is finished once `f` yields `abort` or
if the end of the sequence is reached.
§
§
replace all occurrences of old by new
§(old Sequence Sequence.T, new Sequence Sequence.T, n u64) => Sequence Sequence.T [Inherited from Sequence]
§
(old Sequence Sequence.T, new Sequence Sequence.T, n u64)
=>
Sequence Sequence.T [Inherited from Sequence]
replace the first n occurrences of old by new
reverse the order of the elements in this array
reverse the order of the elements in this array
map this Sequence to a list that contains the result of folding
all prefixes using the given monoid.
e.g., for a Sequence of i32 s, s.scan i32.sum creates a list of
partial sums (0..).map x->(s.take x).fold i32.sum
all prefixes using the given monoid.
e.g., for a Sequence of i32 s, s.scan i32.sum creates a list of
partial sums (0..).map x->(s.take x).fold i32.sum
map this Sequence to a list that contains the result of folding
all prefixes using the given function and initial value.
e.g., for a Sequence s of i32, s.scan (+) 0 creates a list of
partial sums (0..).map x->(s.take x).fold i32.sum
all prefixes using the given function and initial value.
e.g., for a Sequence s of i32, s.scan (+) 0 creates a list of
partial sums (0..).map x->(s.take x).fold i32.sum
scan1 works like its counterpart with an initial value, except
that the initial value is taken to be the first element of the given
Sequence.
for example, (1::id).scan (+) would create [1, 2, 3, 4, ...], while
(1..).scan (+) would create [1, 3, 6, 10, ...].
that the initial value is taken to be the first element of the given
Sequence.
for example, (1::id).scan (+) would create [1, 2, 3, 4, ...], while
(1..).scan (+) would create [1, 3, 6, 10, ...].
create a slice from this array's elements at index 'from' (included)
up to 'to' (excluded).
Complexity:
index access : O(1)
count : O(1)
up to 'to' (excluded).
Complexity:
index access : O(1)
count : O(1)
sliding window with step size one
blocks of size elements, each is offset by one element to the previous one
example:
`(0..5).sliding 3`
=> `[[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5]]`
blocks of size elements, each is offset by one element to the previous one
example:
`(0..5).sliding 3`
=> `[[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5]]`
sliding window
blocks of size elements, each is offset by step elements to the previous one
examples:
`(0..5).sliding 3 1`
=> `[[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5]]`
`(0..9).sliding 3 2`
=> `[[0, 1, 2], [2, 3, 4], [4, 5, 6], [6, 7, 8]]`
blocks of size elements, each is offset by step elements to the previous one
examples:
`(0..5).sliding 3 1`
=> `[[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5]]`
`(0..9).sliding 3 2`
=> `[[0, 1, 2], [2, 3, 4], [4, 5, 6], [6, 7, 8]]`
sort this Sequence
§(less_or_equal Binary bool Sequence.T Sequence.T) => container.sorted_array Sequence.T [Inherited from Sequence]
§
(less_or_equal Binary bool Sequence.T Sequence.T)
=>
container.sorted_array Sequence.T [Inherited from Sequence]
sort this Sequence using the order defined by less_or_equal
create a tuple of two Sequences by splitting this at the given index, i.e.,
a Sequence of length 'at' and one of length 'count-at'.
at may be <= 0 or >= count, in which case the resulting tuple will be the
(empty list, Sequence.this.as_list) or (Sequence.this.as_list, empty list), resp.
a Sequence of length 'at' and one of length 'count-at'.
at may be <= 0 or >= count, in which case the resulting tuple will be the
(empty list, Sequence.this.as_list) or (Sequence.this.as_list, empty list), resp.
does this sequence start with l?
the standard deviation of the sequence
https://en.wikipedia.org/wiki/Standard_deviation
https://en.wikipedia.org/wiki/Standard_deviation
generic sum of the elements of a Sequence of numeric.
This allows summing the elements of a list, as in
l := [1,2,3]
say <| l.sum # '6'
This allows summing the elements of a list, as in
l := [1,2,3]
say <| l.sum # '6'
create a lazy list of all the tails of this Sequence, including the complete Sequence
as a list and the empty list 'nil'.
as a list and the empty list 'nil'.
create a list that consists only of the first n elements of this
Sequence, fewer if this Sequence has fewer elements
Sequence, fewer if this Sequence has fewer elements
Lazily take the first elements of this Sequence for which predicate 'p' holds.
§(TA type, U type, xf transducer TA U Sequence.T, rf Binary TA TA U, init TA) => TA [Inherited from Sequence]
§
(TA
type
, U type
, xf transducer TA U Sequence.T, rf Binary TA TA U, init TA) =>
TA [Inherited from Sequence]
takes a transducer xf, a reducer f and an initial value
returns the result of applying the reducer xf f to the Sequence
returns the result of applying the reducer xf f to the Sequence
filter out duplicate elements.
Keep the order of elements unchanged.
Other languages call this 'distinct' (eg., Java, C# or Kotlin)
or `nub` (Haskell).
ex.
[4,1,2,2,3,2,2,2,4].unique = [4, 1, 2, 3]
Keep the order of elements unchanged.
Other languages call this 'distinct' (eg., Java, C# or Kotlin)
or `nub` (Haskell).
ex.
[4,1,2,2,3,2,2,2,4].unique = [4, 1, 2, 3]
the variance of the sequence
https://en.wikipedia.org/wiki/Variance
https://en.wikipedia.org/wiki/Variance
create a new list from the result of applying 'f' to the
elements of this Sequence and 'b' in order.
elements of this Sequence and 'b' in order.
Type Functions
string representation of this type to be used for debugging.
result has the form "Type of '<name>'", but this might change in the future
result has the form "Type of '<name>'", but this might change in the future
Maximum number of elements shown for on a call to `as_string` for a non-finite
Sequence.
Sequence.
monoid of Sequences with infix concatenation operation.
There is no dynamic type of a type instance since this would result in an
endless hierarchy of types, so dynamic_type is redefined to just return
Type.type here.
endless hierarchy of types, so dynamic_type is redefined to just return
Type.type here.
create an empty array of type T
Is this type assignable to a type parameter with constraint `T`?
The result of this is a compile-time constant that can be used to specialize
code for a particular type.
is_of_integer_type(n T : numeric) => T : integer
say (is_of_integer_type 1234) # true
say (is_of_integer_type 3.14) # false
it is most useful in conjunction preconditions or `if` statements as in
pair(a,b T) is
=>
or
val(n T) is
The result of this is a compile-time constant that can be used to specialize
code for a particular type.
is_of_integer_type(n T : numeric) => T : integer
say (is_of_integer_type 1234) # true
say (is_of_integer_type 3.14) # false
it is most useful in conjunction preconditions or `if` statements as in
pair(a,b T) is
=>
or
val(n T) is
name of this type, including type parameters, e.g. 'option (list i32)'.
array -- create initialized one-dimensional immutable array
convenience prefix operator to create a string from a value.
This permits usage of `$` as a prefix operator in a similar way both
inside and outside of constant strings: $x and "$x" will produce the
same string.
NYI: Redefinition allows the type feature to be distinguished from its normal counterpart, see #3913
This permits usage of `$` as a prefix operator in a similar way both
inside and outside of constant strings: $x and "$x" will produce the
same string.
NYI: Redefinition allows the type feature to be distinguished from its normal counterpart, see #3913
Get a type as a value.
This is a feature with the effect equivalent to Fuzion's `expr.type` call tail.
It is recommended to use `expr.type` and not `expr.type_value`.
`type_value` is here to show how this can be implemented and to illustrate the
difference to `dynamic_type`.
This is a feature with the effect equivalent to Fuzion's `expr.type` call tail.
It is recommended to use `expr.type` and not `expr.type_value`.
`type_value` is here to show how this can be implemented and to illustrate the
difference to `dynamic_type`.
0.093dev (2025-05-13 15:50:27 GIT hash 38f965e14265a6f3ba3f96f18ddedb79352428af built by fridi@fzen)
This is the result type of array(type, i32, i32 -> T) which creates an
initialized immutable array
Note: This uses dummy unit-type args to avoid
name clash with routine array(T,length,init).