customize default return value of matrix-get when peeking outside

This commit is contained in:
2021-12-11 10:49:04 +01:00
parent a1266ca648
commit f0d18d31ce
2 changed files with 22 additions and 13 deletions

View File

@@ -13,19 +13,28 @@
(- (char->integer c) 48)) ; 48 is ASCII's number zero
(define-record-type matrix (fields width height data))
(define (matrix-get matrix x y)
(if (or (< x 0)
(< y 0)
(>= x (matrix-width matrix))
(>= y (matrix-height matrix)))
9
(vector-ref (vector-ref (matrix-data matrix) y) x)))
(define (matrix-from-data data)
(make-matrix
(vector-length (vector-ref data 0))
(vector-length data)
data))
(define (matrix-get matrix x y default)
(if (or (< x 0)
(< y 0)
(>= x (matrix-width matrix))
(>= y (matrix-height matrix)))
default
(vector-ref (vector-ref (matrix-data matrix) y) x)))
(define (matrix-set! matrix x y value)
(when (and (>= x 0)
(>= y 0)
(< x (matrix-width matrix))
(< y (matrix-height matrix)))
(vector-set! (vector-ref (matrix-data matrix) y) x value)))
; parse 0-9 numerical data from file and return a matrix
(define (load-matrix file)
(let y-loop [(heightmap '())]