Streams—Lazy Enumerables
In Elixir, the Enum module is greedy. This means that when you pass it a collection, it potentially consumes all the contents of that collection. It also means the result will typically be another collection. Look at the following pipeline:
| [ 1, 2, 3, 4, 5 ] |
| #=> [ 1, 2, 3, 4, 5 ] |
| |> Enum.map(&(&1*&1)) |
| #=> [ 1, 4, 9, 16, 25 ] |
| |> Enum.with_index |
| #=> [ {1, 0}, {4, 1}, {9, 2}, {16, 3}, {25, 4} ] |
| |> Enum.map(fn {value, index} -> value - index end) |
| #=> [1, 3, 7, 13, 21] |
| |> IO.inspect #=> [1, 3, 7, 13, 21] |
The first map function takes the original list and creates a new list of its squares. with_index takes this list and returns a list of tuples. The next map then subtracts the index ...
Get Programming Elixir ≥ 1.6 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.