exercism/elixir/accumulate/accumulate.exs
2017-07-20 20:33:09 -04:00

33 lines
859 B
Elixir

defmodule Accumulate do
@doc """
Given a list and a function, apply the function to each list item and
replace it with the function's return value.
Returns a list.
## Examples
iex> Accumulate.accumulate([], fn(x) -> x * 2 end)
[]
iex> Accumulate.accumulate([1, 2, 3], fn(x) -> x * 2 end)
[2, 4, 6]
"""
# @spec accumulate(list, (any -> any)) :: list
# def accumulate(list, fun) do
# cond do
# length(list) == 0 -> []
# length(list) == 1 -> fun.(List.first(list))
# true ->
# [head | tail] = list
# [fun.(head), accumulate(tail, fun)]
# end
# end
@spec accumulate(list, (any -> any)) :: list
def accumulate(list, fun) do
List.foldl(list, [], (fn(x, acc) -> acc ++ [fun.(x)] end))
end
end