chickadee » srfi-116 » ifind

ifind pred ilistprocedure

Return the first element of ilist that satisfies predicate pred; false if no element does.

(ifind even? (iq 3 1 4 1 5 9)) ;=> 4

Note that ifind has an ambiguity in its lookup semantics — if ifind returns #f, you cannot tell (in general) if it found a #f element that satisfied pred, or if it did not find any element at all. In many situations, this ambiguity cannot arise — either the ilist being searched is known not to contain any #f elements, or the ilist is guaranteed to have an element satisfying pred. However, in cases where this ambiguity can arise, you should use ifind-tail instead of ifind -- ifind-tail has no such ambiguity:

(cond ((ifind-tail pred lis) => (lambda (ipair) ...)) ; Handle (icar ipair)
      (else ...)) ; Search failed.