Elixir provides another construct to iterate collections: comprehensions. As with the functions from the Enum module, comprehensions work on anything that implements the Enumerable protocol. Let's see a simple example:
iex> for x <- [2, 4, 6], do: x * 2[4, 8, 12]
While, in this simple example, it is similar to Enum.map/2, comprehensions bring some other interesting features. You can, for instance, iterate over multiple collections and also apply filters. Let's see these two being applied in the following example:
iex> for x <- [1, 2, 3], y <- [4, 5, 6], Integer.is_odd(x), do: x * y[4, 5, 6, 12, 15, 18]
Here we're doing a nested iteration–for each element of the first enumerable (which is represented by x), we will iterate ...