[erlang-patches] Add lists:find/2,3

Sean Cribbs <>
Mon Oct 14 02:44:26 CEST 2013

`lists:find/2,3` returns the first element of the passed list for which the
predicate fun returns `true`. If no elements result in the predicate being
true, `undefined` (/2) or the given default value (/3) is returned.

## Why this new feature?

A common task is to select the first element from a list that matches a
condition, but there is no existing lists function or language feature that
avoids traversing the entire list, while still returning a "safe" value.
`lists:find/2,3` codifies the pattern of a tail-recursive search for the
matching item without resorting to exceptions (used to abort `foreach/2` or
`foldl/3`) and always returns either the first matching item, or an
otherwise safe value.

## Risks / uncertain artifacts

It is unclear the desired order of arguments for the 3-arity version. I
have made the default value the final argument which is consistent with
`application:get_env/3` and `proplists:get_value/3`, but most functions in
lists place the `List` argument last.

## How did you solve it?

Following the patterns of other functions in the lists module,
`lists:find/3` tests the predicate function against the head of the list,
returning the head if the predicate passes, or recursing over the tail if
it does not.


Sean Cribbs <>
Software Engineer
Basho Technologies, Inc.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-patches/attachments/20131013/f58d3a2e/attachment.html>

More information about the erlang-patches mailing list