From 969acc2b62cfeea250d89a501e4e94ab860a5d11 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 4 Jun 2015 21:28:45 -0400 Subject: [PATCH] Added vector-fill! --- scheme/base.sld | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/scheme/base.sld b/scheme/base.sld index 15a1521e..6e899e71 100644 --- a/scheme/base.sld +++ b/scheme/base.sld @@ -42,6 +42,8 @@ vector vector-append vector-copy + ;vector-copy! + vector-fill! vector->list vector->string string->vector @@ -199,6 +201,30 @@ (vector-set! new-vec i (vector-ref vec i)) (loop (+ i 1) new-vec)))))) (loop start (make-vector (- end start) #f)))) +; TODO: +; (define (vector-copy! vec to at from . opts) +; (letrec ((len (vector-length vec)) +; (start (if (> (length opts) 0) (car opts) 0)) +; (end (if (> (length opts) 1) (cadr opts) len)) +; (loop (lambda (i) +; (cond +; ((= i end) vec) +; (else +; (vector-set! vec i fill) +; (loop (+ i 1))))))) +; (loop start '()))) + ;; TODO: this len/start/end/loop pattern is common, could use a macro for it + (define (vector-fill! vec fill . opts) + (letrec ((len (vector-length vec)) + (start (if (> (length opts) 0) (car opts) 0)) + (end (if (> (length opts) 1) (cadr opts) len)) + (loop (lambda (i) + (cond + ((= i end) vec) + (else + (vector-set! vec i fill) + (loop (+ i 1))))))) + (loop start '()))) (define (boolean=? b1 b2 . bs) (Cyc-obj=? boolean? b1 (cons b2 bs)))