From a13692ed3093fb603e53f8577f29721152a80106 Mon Sep 17 00:00:00 2001 From: Chongkai Zhu Date: Wed, 18 Apr 2007 02:05:04 +0000 Subject: [PATCH] fix binary-search on 0 length vec svn: r5972 --- collects/srfi/43/vector-lib.ss | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/collects/srfi/43/vector-lib.ss b/collects/srfi/43/vector-lib.ss index 8f354adbf7..d888ff5b52 100644 --- a/collects/srfi/43/vector-lib.ss +++ b/collects/srfi/43/vector-lib.ss @@ -45,14 +45,14 @@ (f i seed) (vector-set! vec i elt) (unfold1! f vec (sub1 i) new-seed)))) - + (define unfold-contract (->r ((f (lambda (f) (and (procedure? f) (procedure-arity-includes? f (add1 (length seeds)))))) (len natural-number/c)) - seeds list? - any)) + seeds list? + any)) (define copy-contract (case-> @@ -160,8 +160,8 @@ (let ((new-vector (make-vector (- end start) fill))) (vector-copy! new-vector 0 - vec start - (min end (vector-length vec))) + vec start + (min end (vector-length vec))) new-vector))) ;;; (VECTOR-REVERSE-COPY [ ]) -> vector @@ -489,7 +489,7 @@ ;;; reached, return #F. (define vector-index (letrec ((loop1 (lambda (pred? vec len i) - (cond ((= i len) #f) + (cond ((>= i len) #f) ((pred? (vector-ref vec i)) i) (else (loop1 pred? vec len (add1 i)))))) (loop2+ (lambda (pred? vectors len i) @@ -592,15 +592,14 @@ ;;; element to VALUE with CMP. (define (vector-binary-search vec value cmp) (let loop ((start 0) - (end (vector-length vec)) - (j -1)) - (let ((i (quotient (+ start end) 2))) - (if (= i j) - #f - (let ((comparison (cmp (vector-ref vec i) value))) - (cond ((zero? comparison) i) - ((positive? comparison) (loop start i i)) - (else (loop i end i)))))))) + (end (vector-length vec))) + (if (= start end) + #f + (let* ((i (quotient (+ start end) 2)) + (comparison (cmp (vector-ref vec i) value))) + (cond ((zero? comparison) i) + ((positive? comparison) (loop start i)) + (else (loop (add1 i) end))))))) ;;; (VECTOR-ANY ...) -> value ;;; Apply PRED? to each parallel element in each VECTOR ...; if PRED?