; vec-search-up? : (any -> boolean) (vectorof any) -> boolean ; Purpose: Returns whether any element of the vector meets the given ; predicate. ; Examples: ; (vec-search-up? number? (vector true false)) = false ; (vec-search-up? number? (vector true 3 false)) = true ; (vec-search-up? number? (vector)) = false (define (vec-search-up1? pred? a-vec) (local [;; search : natnum -> boolean ;; Purpose: Returns whether any element ;; (vector-length a-vec)-num_elts..(vector-length a-vec)-1 ;; of a-vec meets predicate pred?. (define (search num_elts) (cond [(zero? num_elts) false] [else (or (pred? (vector-ref a-vec (- (vector-length a-vec) num_elts))) (search (sub1 num_elts)))]))] (search (vector-length a-vec)))) (define (vec-search-up2? pred? a-vec) (local [;; search : natnum -> boolean ;; Purpose: Returns whether any element ;; index..(vector-length a-vec)-1 ;; of a-vec meets predicate pred?. (define (search index) (cond [(= (vector-length a-vec) index) false] [else (or (pred? (vector-ref a-vec index)) (search (add1 index)))]))] (search 0))) ; Note: vec-search-up2? does NOT work with zero-length vectors, ; i.e., (vector). To make it work, you need to change the base case, ; e.g., to ; [(<= (vector-length a-vec) index) false]