@code{(require 'array)} @ftindex array @defun array? obj Returns @code{#t} if the @var{obj} is an array, and @code{#f} if not. @end defun @noindent @emph{Note:} Arrays are not disjoint from other Scheme types. Strings and vectors also satisfy @code{array?}. A disjoint array predicate can be written: @example (define (strict-array? obj) (and (array? obj) (not (string? obj)) (not (vector? obj)))) @end example @defun array=? array1 array2 Returns @code{#t} if @var{array1} and @var{array2} have the same rank and shape and the corresponding elements of @var{array1} and @var{array2} are @code{equal?}. @example (array=? (make-array 'foo 3 3) (make-array 'foo '(0 2) '(1 2))) @result{} #t @end example @end defun @defun make-array initial-value bound1 bound2 @dots{} Creates and returns an array with dimensions @var{bound1}, @var{bound2}, @dots{} and filled with @var{initial-value}. @end defun @noindent When constructing an array, @var{bound} is either an inclusive range of indices expressed as a two element list, or an upper bound expressed as a single integer. So @example (make-array 'foo 3 3) @equiv{} (make-array 'foo '(0 2) '(0 2)) @end example @defun make-shared-array array mapper bound1 bound2 @dots{} @code{make-shared-array} can be used to create shared subarrays of other arrays. The @var{mapper} is a function that translates coordinates in the new array into coordinates in the old array. A @var{mapper} must be linear, and its range must stay within the bounds of the old array, but it can be otherwise arbitrary. A simple example: @example (define fred (make-array #f 8 8)) (define freds-diagonal (make-shared-array fred (lambda (i) (list i i)) 8)) (array-set! freds-diagonal 'foo 3) (array-ref fred 3 3) @result{} FOO (define freds-center (make-shared-array fred (lambda (i j) (list (+ 3 i) (+ 3 j))) 2 2)) (array-ref freds-center 0 0) @result{} FOO @end example @end defun @defun array-rank obj Returns the number of dimensions of @var{obj}. If @var{obj} is not an array, 0 is returned. @end defun @defun array-shape array Returns a list of inclusive bounds. @example (array-shape (make-array 'foo 3 5)) @result{} ((0 2) (0 4)) @end example @end defun @defun array-dimensions array @code{array-dimensions} is similar to @code{array-shape} but replaces elements with a 0 minimum with one greater than the maximum. @example (array-dimensions (make-array 'foo 3 5)) @result{} (3 5) @end example @end defun @defun array-in-bounds? array index1 index2 @dots{} Returns @code{#t} if its arguments would be acceptable to @code{array-ref}. @end defun @defun array-ref array index1 index2 @dots{} Returns the (@var{index1}, @var{index2}, @dots{}) element of @var{array}. @end defun @defun array-set! array obj index1 index2 @dots{} Stores @var{obj} in the (@var{index1}, @var{index2}, @dots{}) element of @var{array}. The value returned by @code{array-set!} is unspecified. @end defun