7.4 Conversion
Convert a flat list to an 
m×
n matrix and back;
both 
m and 
n must be positive, and 
(* m n) = (length xs).
The entries in 
xs are in row-major order.
| Examples: | 
| | > (list->matrix 2 3 '(1 2 3 4 5 6)) |  | - : (Array Positive-Byte) |  | (array #[#[1 2 3] #[4 5 6]]) |  | > (matrix->list (matrix [[1 2] [3 4] [5 6]])) |  | - : (Listof Positive-Byte) |  | '(1 2 3 4 5 6) | 
 | 
| Examples: | 
| | > (vector->matrix 2 3 #(1 2 3 4 5 6)) |  | - : (Mutable-Array Integer) |  | (mutable-array #[#[1 2 3] #[4 5 6]]) |  | > (matrix->vector (matrix [[1 2] [3 4] [5 6]])) |  | - : (Vectorof Integer) |  | '#(1 2 3 4 5 6) | 
 | 
Convert a list, vector, or array into a row or column matrix.
If xs is an array, it must be nonempty and not have more than one axis with length
greater than 1.
| Examples: | 
| | > (->row-matrix '(1 2 3)) |  | - : (Array Positive-Byte) |  | (array #[#[1 2 3]]) |  | > (->row-matrix #(1 2 3)) |  | - : (Array Integer) |  | (array #[#[1 2 3]]) |  | > (->row-matrix (col-matrix [1 2 3])) |  | - : (Array Positive-Byte) |  | (array #[#[1 2 3]]) |  | > (->col-matrix (array #[#[#[1]] #[#[2]] #[#[3]]])) |  | - : (Array Positive-Byte) |  | (array #[#[1] #[2] #[3]]) |  | > (->col-matrix (matrix [[1 0] [0 1]])) |  | array->col-matrix: contract violation |  |   expected: nonempty Array with exactly one axis of length |  | >= 1 |  |   given: (array #[#[1 0] #[0 1]]) | 
 | 
Convert a list of lists of entries into a matrix and back.
| Examples: | 
| | > (list*->matrix '((1 2 3) (4 5 6))) |  | - : (Array Positive-Byte) |  | (array #[#[1 2 3] #[4 5 6]]) |  | > (matrix->list* (matrix [[1 2 3] [4 5 6]])) |  | - : (Listof (Listof Positive-Byte)) |  | '((1 2 3) (4 5 6)) | 
 | 
These functions are like 
list*->array and 
array->list*, but use a fixed-depth
(i.e. non-recursive) list type, and do not require a predicate to distinguish entries from rows.
As in the first example, Typed Racket often needs help inferring the type A.