summaryrefslogtreecommitdiffstats
path: root/arraymap.txi
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@robocracy.org>2017-02-20 00:05:29 -0800
committerBryan Newbold <bnewbold@robocracy.org>2017-02-20 00:05:29 -0800
commit8466d8cfa486fb30d1755c4261b781135083787b (patch)
treec8c12c67246f543c3cc4f64d1c07e003cb1d45ae /arraymap.txi
parent87b82b5822ca54228cfa6df29be3ad9d4bc47d16 (diff)
downloadslib-8466d8cfa486fb30d1755c4261b781135083787b.tar.gz
slib-8466d8cfa486fb30d1755c4261b781135083787b.zip
Import Upstream version 3a1upstream/3a1
Diffstat (limited to 'arraymap.txi')
-rw-r--r--arraymap.txi68
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