wiki:SearchMismatchCowan

Version 1 (modified by cowan, 5 years ago) (diff)

--

This is a small WG2 proposal for Scheme procedures corresponding to the Common Lisp functions SEARCH and MISMATCH.

(vector-search test vector1 vector2 [ [ [ [ start1 ] end1 ] start2 ] end2 ])

(vector-rsearch test vector1 vector2 [ [ [ [ start1 ] end1 ] start2 ] end2 ])

Searches vector2 from start2 to end2 for the leftmost (for vector-search) or the rightmost (for vector-rsearch) sub-vector whose elements are the same (in the sense of test) as those of vector1 from start1 to end1. Test is a predicate of two arguments. The usual default rules and restrictions apply to the start and end arguments.

Returns an index into vector2 if the search succeeds, or #f if it fails.

The order in which the search is made is unspecified; in particular, vector-rsearch may search from left to right rather than right to left. The number of times that test is invoked is also unspecified.

(list-search test list1 list2 [ [ [ [ start1 ] end1 ] start2 ] end2 ])

(list-rsearch test list1 list2 [ [ [ [ start1 ] end1 ] start2 ] end2 ])

Analogous to vector-search and vector-rsearch, but applicable to lists.

(string-search test string1 string2 [ [ [ [ start1 ] end1 ] start2 ] end2 ])

(string-rsearch test string1 string2 [ [ [ [ start1 ] end1 ] start2 ] end2 ])

Analogous to vector-search and vector-rsearch, but applicable to strings.

(vector-mismatch test vector1 vector2 [ [ [ [ start1 ] end1 ] start2 ] end2 ])

(vector-rmismatch test vector1 vector2 [ [ [ [ start1 ] end1 ] start2 ] end2 ])

Compares vector1 from start1 to end1 element-wise with vector2 from start2 to end2. If there are the same number of elements, and they are the same in the sense of test, then returns #f, otherwise returns the leftmost (for vector-mismatch) or the rightmost (for vector-rmismatch) position within vector1 at which they fail to match. Test is a predicate of two arguments. The usual default rules and restrictions apply to the start and end arguments.

The order in which the examination is made is unspecified; in particular, vector-rmismatch may examine elements from left to right rather than right to left. The number of times that test is invoked is also unspecified.

(list-mismatch test list1 list2 [ [ [ [ start1 ] end1 ] start2 ] end2 ])

(list-rmismatch test list1 list2 [ [ [ [ start1 ] end1 ] start2 ] end2 ])

Analogous to vector-mismatch and vector-rmismatch, but applicable to lists.

(string-mismatch test string1 string2 [ [ [ [ start1 ] end1 ] start2 ] end2 ])

(string-rmismatch test string1 string2 [ [ [ [ start1 ] end1 ] start2 ] end2 ])

Analogous to vector-mismatch and vector-rmismatch, but applicable to strings.