aboutsummaryrefslogtreecommitdiffstats
path: root/array.txi
blob: 5d30b1929cda2c69cc37aeb21b331beb2d8ea573 (plain)
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