From c2f4dde340185a4b42beacd46355f94ae41e25e4 Mon Sep 17 00:00:00 2001 From: Masaya Tojo Date: Sun, 16 Jun 2024 15:14:13 +0900 Subject: Add vector implementations --- algebraic-structures.private.vector.scm | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 algebraic-structures.private.vector.scm (limited to 'algebraic-structures.private.vector.scm') diff --git a/algebraic-structures.private.vector.scm b/algebraic-structures.private.vector.scm new file mode 100644 index 0000000..c9deb22 --- /dev/null +++ b/algebraic-structures.private.vector.scm @@ -0,0 +1,27 @@ +(module (algebraic-structures private vector) (<> unit fold reduce map1) + (import (except scheme + vector-fill! vector->list list->vector) + (only (chicken base) add1 assert) + (srfi 133)) + + (define (<> xs ys) (vector-append xs ys)) + + (define unit #()) + + (define (fold f z v) + (vector-fold (lambda (x y) (f y x)) + z + v)) + + (define (reduce f v) + (assert (not (zero? (vector-length v)))) + (let ((len (vector-length v))) + (let loop ((i 1) + (acc (vector-ref v 0))) + (if (= i len) + acc + (loop (add1 i) + (f (vector-ref v i) acc)))))) + + (define (map1 f v) + (vector-map f v))) -- cgit v1.2.3