summary refs log tree commit diff
diff options
context:
space:
mode:
authorArun Isaac2024-09-30 00:46:22 +0100
committerArun Isaac2024-10-01 01:12:50 +0100
commit5dbe02ae9028137221a9466af906e804293dff10 (patch)
tree570d8511c1a5bea5e060532e93e27b0e98c5d0c7
parent8bf59d490e8de2f430e3c4907d30c21b844a5e49 (diff)
downloadravanan-5dbe02ae9028137221a9466af906e804293dff10.tar.gz
ravanan-5dbe02ae9028137221a9466af906e804293dff10.tar.lz
ravanan-5dbe02ae9028137221a9466af906e804293dff10.zip
vectors: Add unindexed variant of vector-fold.
* ravanan/work/vectors.scm: Import vector-fold from (srfi srfi-43)
with prefix.
(vector-fold): New public function.
(vector-map->list, vector-append-map, vector-append-map->list): Use
vector-fold.
-rw-r--r--ravanan/work/vectors.scm23
1 files changed, 18 insertions, 5 deletions
diff --git a/ravanan/work/vectors.scm b/ravanan/work/vectors.scm
index f47c67b..993fb49 100644
--- a/ravanan/work/vectors.scm
+++ b/ravanan/work/vectors.scm
@@ -22,12 +22,13 @@
   #:use-module ((srfi srfi-43) #:select (vector-append
                                          (vector-map . vector-map-indexed)
                                          vector-any
-                                         vector-every
-                                         vector-fold))
+                                         vector-every))
+  #:use-module ((srfi srfi-43) #:select (vector-fold) #:prefix srfi-43:)
   #:export (vector-map->list
             vector-append-map
             vector-append-map->list
             map->vector
+            vector-fold
             vector-filter
             vector-filter-map
             vector-filter-map->list
@@ -41,11 +42,23 @@
                vector-any
                vector-every))
 
+(define (vector-fold proc init first-vector . other-vectors)
+  "Apply @var{proc} to the elements of @var{first-vector} and @var{other-vectors}
+to build a result, and return that result. Each @var{proc} call is @code{(proc
+result element1 element2 ...)} where @var{result} is the return value from the
+previous call to @var{proc}, or @var{init} for the first call."
+  (apply srfi-43:vector-fold
+         (lambda (_ result . elements)
+           (apply proc result elements))
+         init
+         first-vector
+         other-vectors))
+
 (define (vector-map->list proc first-vector . other-vectors)
   "Map @var{proc} over vectors and return a list of the results."
   (reverse
    (apply vector-fold
-          (lambda (_ result . elements)
+          (lambda (result . elements)
             (cons (apply proc elements)
                   result))
           (list)
@@ -56,7 +69,7 @@
   "Map @var{proc} over vectors and return a vector of the results appended
 together."
   (apply vector-fold
-         (lambda (_ result . elements)
+         (lambda (result . elements)
            (vector-append result
                           (apply proc elements)))
          (vector)
@@ -67,7 +80,7 @@ together."
   "Map @var{proc} over vectors and return a list of the results appended
 together."
   (apply vector-fold
-         (lambda (_ result . elements)
+         (lambda (result . elements)
            (append result
                    (apply proc elements)))
          (list)