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