In 2016 there was a patch submitted to clojure core that added an efficient shortcut for (first (filter pred coll)) idiom, it was called seek.
The implementation avoided problems in herent with both the (first (filter)) and (some #(when (pred))) alternatives. That is, it works efficiently with chunked sequences and plays nice with nil? and false? predicates.
Patch:
(defn seek "Returns first item from coll for which (pred item) returns true. Returns nil if no such item is present, or the not-found value if supplied." {:added "1.9" ; note, this was never accepted into clojure core :static true} ([pred coll] (seek pred coll nil)) ([pred coll not-found] (reduce (fn [_ x] (if (pred x) (reduced x) not-found)) not-found coll)))
Examples:
(seek odd? (range)) => 1 (seek pos? [-1 1]) => 1 (seek pos? [-1 -2] ::not-found) => ::not-found (seek nil? [1 2 nil 3] ::not-found) => nil
Eventually the patch was rejected:
Upon review, we've decided that we do not wish to include this. Use of linear search (and in particular nested linear search) leads to poor performance - often it's better to use other kinds of data structures and that's why this functionality has not been included in the past. ~Alex Miller 12/May/17 3:34 PM
(first (filter #(= % 1) '(3 4 1))?