You can use Enum.partition/2 :
iex(1)> require Integer iex(2)> [1, 2, 3, 4, 5] |> Enum.partition(&Integer.is_even/1) {[2, 4], [1, 3, 5]}
If you really want to use Enum.reduce/2 , you can do this:
iex(3)> {evens, odds} = [1, 2, 3, 4, 5] |> Enum.reduce({[], []}, fn n, {evens, odds} -> ...(3)> if Integer.is_even(n), do: {[n | evens], odds}, else: {evens, [n | odds]} ...(3)> end) {[4, 2], [5, 3, 1]} iex(4)> {Enum.reverse(evens), Enum.reverse(odds)} {[2, 4], [1, 3, 5]}
source share