diff options
author | Bryan Newbold <bnewbold@robocracy.org> | 2017-02-20 00:05:29 -0800 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2017-02-20 00:05:29 -0800 |
commit | 8466d8cfa486fb30d1755c4261b781135083787b (patch) | |
tree | c8c12c67246f543c3cc4f64d1c07e003cb1d45ae /arraymap.txi | |
parent | 87b82b5822ca54228cfa6df29be3ad9d4bc47d16 (diff) | |
download | slib-8466d8cfa486fb30d1755c4261b781135083787b.tar.gz slib-8466d8cfa486fb30d1755c4261b781135083787b.zip |
Import Upstream version 3a1upstream/3a1
Diffstat (limited to 'arraymap.txi')
-rw-r--r-- | arraymap.txi | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/arraymap.txi b/arraymap.txi new file mode 100644 index 0000000..f10ad65 --- /dev/null +++ b/arraymap.txi @@ -0,0 +1,68 @@ +@code{(require 'array-for-each)} +@ftindex array-for-each + + +@deffn {Procedure} array-map! array0 proc array1 @dots{} + +@var{array1}, @dots{} must have the same number of dimensions as +@var{array0} and have a range for each index which includes the range +for the corresponding index in @var{array0}. @var{proc} is applied to +each tuple of elements of @var{array1} @dots{} and the result is stored +as the corresponding element in @var{array0}. The value returned is +unspecified. The order of application is unspecified. +@end deffn + +@defun array-map prototype proc array1 array2 @dots{} + +@var{array2}, @dots{} must have the same number of dimensions as +@var{array1} and have a range for each index which includes the +range for the corresponding index in @var{array1}. @var{proc} is +applied to each tuple of elements of @var{array1}, @var{array2}, +@dots{} and the result is stored as the corresponding element in a +new array of type @var{prototype}. The new array is returned. The +order of application is unspecified. +@end defun + +@defun array-for-each proc array0 @dots{} + +@var{proc} is applied to each tuple of elements of @var{array0} @dots{} +in row-major order. The value returned is unspecified. +@end defun + +@defun array-indexes array + +Returns an array of lists of indexes for @var{array} such that, if +@var{li} is a list of indexes for which @var{array} is defined, +(equal? @var{li} (apply array-ref (array-indexes @var{array}) +@var{li})). +@end defun + +@deffn {Procedure} array-index-map! array proc + +applies @var{proc} to the indices of each element of @var{array} in +turn, storing the result in the corresponding element. The value +returned and the order of application are unspecified. + +One can implement @var{array-indexes} as +@example +(define (array-indexes array) + (let ((ra (apply create-array '#() (array-shape array)))) + (array-index-map! ra (lambda x x)) + ra)) +@end example +Another example: +@example +(define (apl:index-generator n) + (let ((v (make-vector n 1))) + (array-index-map! v (lambda (i) i)) + v)) +@end example +@end deffn + +@deffn {Procedure} array-copy! source destination + +Copies every element from vector or array @var{source} to the +corresponding element of @var{destination}. @var{destination} must +have the same rank as @var{source}, and be at least as large in each +dimension. The order of copying is unspecified. +@end deffn |