6.9 Comprehensions and Sequences
Sometimes sequential processing is unavoidable, so math/array provides loops and sequences.
(for/array: maybe-shape maybe-fill (for:-clause ...) maybe-type-ann | body ...+) |
|
|
(for*/array: maybe-shape maybe-fill (for:-clause ...) maybe-type-ann | body ...+) |
| | maybe-shape | | = | | | | | | | | #:shape ds | | | | | | maybe-fill | | = | | | | | | | | #:fill fill | | | | | | maybe-type-ann | | = | | | | | | | | : body-type |
| | |
|
Creates arrays by generating elements in a
for-loop or
for*-loop.
Unlike other Typed Racket loop macros, these accept a
body annotation, which declares
the type of elements. They do not accept an annotation for the entire type of the result.
Examples: |
| - : (Mutable-Array Integer) | (mutable-array #[0 2 4]) | | - : (Mutable-Array Integer) | (mutable-array #[0 1 2 1 2 3 2 3 4]) |
|
The shape of the result is independent of the loop clauses: note that the last example
does not have shape #(3 3), but shape #(9). To control the shape, use the
#:shape keyword:
|
- : (Mutable-Array Integer) |
(mutable-array #[#[0 1 2] #[1 2 3] #[2 3 4]]) |
If the loop does not generate enough elements, the rest are filled with the first
generated value:
> (for*/array: #:shape #(4) ([x (in-range 1 3)]) x) |
- : (Mutable-Array Any) |
(mutable-array #[1 2 1 1]) |
To change this behavior, use the #:fill keyword:
> (for*/array: #:shape #(4) #:fill -1 ([x (in-range 1 3)]) x) |
- : (Mutable-Array Any) |
(mutable-array #[1 2 -1 -1]) |
In the last two examples, the array’s type is
(Mutable-Array Any) because
a body annotation was not given.
(for/array maybe-shape maybe-fill (for-clause ...) | body ...+) |
|
|
(for*/array maybe-shape maybe-fill (for-clause ...) | body ...+) |
|
|
Untyped versions of the loop macros.
Returns a sequence of arr’s elements in row-major order.
Examples: |
> (define arr (array #[#[1 2] #[10 20]])) | | > (sequence->list (in-array-axis arr)) | - : (Listof (Array Positive-Byte)) | (list (array #[1 2]) (array #[10 20])) | > (sequence->list (in-array-axis arr 1)) | - : (Listof (Array Positive-Byte)) | (list (array #[1 10]) (array #[2 20])) |
|
Returns a sequence of indexes for shape ds, in row-major order.
Examples: |
| - : (Mutable-Array Indexes) | (mutable-array | #[#['#(0 0) '#(0 1) '#(0 2)] | #['#(1 0) '#(1 1) '#(1 2)] | #['#(2 0) '#(2 1) '#(2 2)]]) |
| | - : (Mutable-Array In-Indexes) | (mutable-array | #[#['#(0 0) '#(0 1) '#(0 2)] | #['#(1 0) '#(1 1) '#(1 2)] | #['#(2 0) '#(2 1) '#(2 2)]]) |
| > (indexes-array #(3 3)) | - : (Array Indexes) | (array | #[#['#(0 0) '#(0 1) '#(0 2)] | #['#(1 0) '#(1 1) '#(1 2)] | #['#(2 0) '#(2 1) '#(2 2)]]) |
|
|