Merge pull request #263 from omasanori/srfi43

Make vector-map{,!} SRFI 43-compliant
This commit is contained in:
Yuichi Nishiwaki 2015-05-16 02:07:41 +09:00
commit d2842dd579
1 changed files with 16 additions and 4 deletions

View File

@ -1,5 +1,5 @@
(define-library (srfi 43) (define-library (srfi 43)
(import (scheme base) (import (except (scheme base) vector-map)
(srfi 8)) (srfi 8))
;; # Constructors ;; # Constructors
@ -92,16 +92,28 @@
(map (lambda (v) (vector-ref v count)) vects)) (map (lambda (v) (vector-ref v count)) vects))
(- count 1)))))) (- count 1))))))
(define (vector-map! f vec . vects) (define (vector-map f vec . vects)
(let* ((vects (cons vec vects)) (let* ((vects (cons vec vects))
(veclen (apply min (map vector-length vects))) (veclen (apply min (map vector-length vects)))
(new-vect (make-vector veclen))) (new-vect (make-vector veclen)))
(let rec ((count 0))
(if (= count veclen)
new-vect
(begin
(vector-set! new-vect count
(apply f count (map (lambda (v) (vector-ref v count))
vects)))
(rec (+ 1 count)))))))
(define (vector-map! f vec . vects)
(let* ((vects (cons vec vects))
(veclen (apply min (map vector-length vects))))
(let rec ((count 0)) (let rec ((count 0))
(if (< count veclen) (if (< count veclen)
(begin (begin
(vector-set! vec count (vector-set! vec count
(apply f (map (lambda (v) (vector-ref v count)) (apply f count (map (lambda (v) (vector-ref v count))
vects))) vects)))
(rec (+ 1 count))))))) (rec (+ 1 count)))))))
(define (vector-count pred? vec . vects) (define (vector-count pred? vec . vects)