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