;;; File: ;;; searching.scm ;;; Authors: ;;; Samuel A. Rebelsky ;;; The denizens of CSC151.02 2003F ;;; Summary: ;;; A variety of procedures for searching lists and vectors. ;;; Procedure: ;;; search-vector ;;; Parameters: ;;; vec, a vector ;;; pred? a predicate ;;; Purpose: ;;; Find a value in vec for which pred? holds. ;;; Produces: ;;; pos, the index of vec in which a value that matches pred? resides ;;; Preconditions: ;;; pred? must be applicable to every element in vec ;;; Postconditions: ;;; pos is an integer ;;; If pred? holds for no element of vec, pos is -1. ;;; If pred? holds for an element of vec, ;;; pos is a valid index (<= 0 pos (- (vector-length vec) 1)) ;;; (pred? (vector-ref vec pos)) holds (is not #f) ;;; Pstrategy: ;;; Recursive kernel keeps track of position ;;; Position starts at high value and drops down (define search-vector (lambda (pred? vec) (letrec ((kernel (lambda (pos) (cond ((< pos 0) -1) ((pred? (vector-ref vec pos)) pos) (else (kernel (- pos 1))))))) (kernel (- (vector-length vec) 1))))) ;;; Procedure: ;;; Parameters: ;;; Purpose: ;;; Produces: ;;; Preconditions: ;;; Postconditions: ;;; Procedure: ;;; Parameters: ;;; Purpose: ;;; Produces: ;;; Preconditions: ;;; Postconditions: