(SRFI 1) Returns the first element in list for which predicate is true; returns
#fif it doesn't find such an element. Predicate must be a procedure of one argument.(find even? '(3 1 4 1 5 9)) => 4Note that
findhas an ambiguity in its lookup semantics—iffindreturns#f, you cannot tell (in general) if it found a#felement that satisfied predicate, or if it did not find any element at all. In many situations, this ambiguity cannot arise—either the list being searched is known not to contain any#felements, or the list is guaranteed to have an element satisfying predicate. However, in cases where this ambiguity can arise, you should usefind-tailinstead offind—find-tailhas no such ambiguity:(cond ((find-tail pred lis) => (lambda (pair) ...)) ; Handle (CAR PAIR) (else ...)) ; Search failed.The non-standard
find-matching-itemprocedure (and its aliaslist-search-positive) works identically except that its argument order is reversed.list-search-negativeis similar tolist-search-positivebut the sense of the predicate is reversed.
(SRFI 1) Returns the first pair of list whose car satisfies predicate; returns
#fif there's no such pair.find-tailcan be viewed as a general-predicate variant of memv.
These procedures return the first pair of list whose car is object; the returned pair is always one from which list is composed. If object does not occur in list,
#f(n.b.: not the empty list) is returned.memquseseq?to compare object with the elements of list, whilememvuseseqv?andmemberusesequal?.1(memq 'a '(a b c)) => (a b c) (memq 'b '(a b c)) => (b c) (memq 'a '(b c d)) => #f (memq (list 'a) '(b (a) c)) => #f (member (list 'a) '(b (a) c)) => ((a) c) (memq 101 '(100 101 102)) => unspecified (memv 101 '(100 101 102)) => (101 102)
Returns a procedure similar to
memq, except that predicate, which must be an equivalence predicate, is used instead ofeq?. This could be used to definememvas follows:(define memv (member-procedure eqv?))
[1] Although
they are often used as predicates, memq, memv, and
member do not have question marks in their names because they
return useful values rather than just #t or #f.