Today’s Erlang Thursday is lists:partition/2.
lists:partition/2
takes two arguments, a predicate function that will be called for every entry in the list, and returns a boolean value. The second argument to lists:partition/2
is the list to be partitioned.
lists:partition/2
returns a two-tuple, with the first item in the tuple being the list of those items for which the predicate function returns true. The second item in the tuple is a list of those items for which the predicate function returned false.
lists:partition(fun(X) -> X rem 2 == 1 end, [1, 2, 3, 4, 5, 6, 7]). % {[1,3,5,7],[2,4,6]} lists:partition(fun(X) -> X rem 3 == 0 end, [1, 2, 3, 4, 5, 6, 7]). % {[3,6],[1,2,4,5,7]} lists:partition(fun erlang:is_atom/1, [a, 1, [b, c], 'B', fun lists:sum/1]). % {[a,'B'],[1,[b,c],#Fun<lists.sum.1>]} lists:partition(fun erlang:is_atom/1, [a, 1, {b, [z]}, 'B', fun lists:sum/1]). % {[a,'B'],[1,{b,[z]},#Fun<lists.sum.1>]} lists:partition(fun erlang:is_atom/1, []). % {[],[]}
–Proctor