diff options
Diffstat (limited to 'array.txi')
-rw-r--r-- | array.txi | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/array.txi b/array.txi new file mode 100644 index 0000000..5d30b19 --- /dev/null +++ b/array.txi @@ -0,0 +1,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 |