Skip to content

Latest commit

 

History

History
31 lines (24 loc) · 1.07 KB

File metadata and controls

31 lines (24 loc) · 1.07 KB

Elixir

Reduce vs Fold

Source

def convert_to_ascii_art(list) do
  [head | tail] = list
                  |> Enum.map(&ascii_char/1)
                  |> Enum.map(&String.split(&1, "\n"))

  tail
  |> Enum.reduce(head, &join_char/2)
  |> Enum.join("\n")
end

In order to use Enum.reduce/3 we have to provide accumulator - an initial element for reducing. That is why we destruct list by its head, which would be accumulator, and its tail, which we provide as first argument to Enum.reduce/3.

It turns out, in Elixir we have overload for Enum.reduce, which is Enum.reduce/2. This version doesn't require an initial element, so we can rewrite our code, continuing pipe throughout the whole function.

def convert_to_ascii_art(list) do
  list
  |> Enum.map(&ascii_char/1)
  |> Enum.map(&String.split(&1, "\n"))
  |> Enum.reduce(&join_char/2)
  |> Enum.join("\n")
end