#### 1.20Matrix Functions: "matrix.rkt"

 (require htdp/matrix) package: htdp-lib

The experimental teachpack supports matrices and matrix functions. A matrix is just a rectangle of ’objects’. It is displayed as an image, just like the images from Manipulating Images: "image.rkt". Matrices are images and, indeed, scenes in the sense of the Simulations and Animations: "world.rkt".

No educational materials involving matrices exist.

The functions access a matrix in the usual (school-mathematics) manner: row first, column second.

The functions aren’t tuned for efficiency so don’t expect to build programs that process lots of data.

Rectangle A Rectangle (of X) is a non-empty list of lists containing X where all elements of the list are lists of equal (non-zero) length.

 procedure(matrix? o) → boolean? o : any/c
determines whether the given object is a matrix?

 procedure m : matrix?
determines how many rows this matrix m has

 procedure m : matrix?
determines ow many columns this matrix m has

 procedure r : Rectangle
creates a matrix from the given Rectangle

 procedure m : matrix?
creates a rectangle from this matrix m

 procedure(make-matrix n m l) → matrix? n : natural-number/c m : natural-number/c l : (Listof X)
creates an n by m matrix from l

NOTE: make-matrix would consume an optional number of entries, if it were like make-vector

procedure

(build-matrix n m f)  matrix?

n : natural-number/c
m : natural-number/c
f :
 (-> (and/c natural-number/c (
creates an n by m matrix by applying f to (0 ,0), (0 ,1), ..., ((sub1 m) ,(sub1 n))

 procedure(matrix-ref m i j) → any/c m : matrix? i : (and/c natural-number/c (
retrieve the item at (i,j) in matrix m

 procedure(matrix-set m i j x) → matrix? m : matrix? i : (and/c natural-number/c (
creates a new matrix with x at (i,j) and all other places the same as in m

 procedure(matrix-where? m pred?) → (listof posn?) m : matrix? pred? : (-> any/c boolean?)
(matrix-where? M P) produces a list of (make-posn i j) such that (P (matrix-ref M i j)) holds

 procedure m : matrix?
renders this matrix m as a rectangle of strings

 procedure(matrix-minor m i j) → matrix? m : matrix? i : (and/c natural-number/c (
creates a matrix minor from m at (i,j)

##### 1.20.1Matrix Snip

The htdp/matrix teachpack exports the snip-class object to support saving and reading matrix snips.

 valuesnip-class : (instance/of matrix-snip-class%)
An object to support 2D matrix rendering.