1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
@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
|