- Code: Select all
(define (run-example)
;; make an array with dimensions 3x4x5:
(define a (mk-array '(3 4 5) "n/a"))
;; get element:
(write (a 1 0 2)) ;; => "n/a"
(newline)
;; set element to value "foo":
(a 1 0 2 "foo")
;; get again:
(write (a 1 0 2)) ;; => "foo"
(newline))
(define (mk-array diml init)
(define v (make-vector (apply * diml) init))
(lambda args
(let loop ((diml diml) (args args) (s 0))
(if (null? diml)
(if (null? args)
(vector-ref v s)
(vector-set! v s (car args)))
(let ((d (car diml)) (i (car args)))
(loop (cdr diml) (cdr args) (+ (* s d) i)))))))
(run-example)
Regards
Thomas

