cyclone/examples/game-of-life-png/example/grid.sld
2016-04-19 04:04:54 -04:00

35 lines
1.1 KiB
Scheme

; Example from draft 6 of R7RS
(define-library (example grid)
(export make rows cols ref each
put!) ;(rename put! set!))
(import (scheme base))
(begin
;; Create an NxM grid.
(define (make n m)
(let ((grid (make-vector n)))
(do ((i 0 (+ i 1)))
((= i n) grid)
(let ((v (make-vector m #f)))
(vector-set! grid i v)))))
(define (rows grid)
(vector-length grid))
(define (cols grid)
(vector-length (vector-ref grid 0)))
;; Return #false if out of range.
(define (ref grid n m)
(and (< -1 n (rows grid))
(< -1 m (cols grid))
(vector-ref (vector-ref grid n) m)))
(define (put! grid n m v)
(define tmp (vector-ref grid n))
(vector-set!
grid
n
(vector-set! tmp m v)))
;(vector-set! (vector-ref grid n) m v))
(define (each grid proc)
(do ((j 0 (+ j 1)))
((= j (rows grid)))
(do ((k 0 (+ k 1)))
((= k (cols grid)))
(proc j k (ref grid j k)))))))