exercism/elixir/flatten-array/flatten_array.exs

24 lines
593 B
Elixir

defmodule FlattenArray do
@doc """
Accept a list and return the list flattened without nil values.
## Examples
iex> FlattenArray.flatten([1, [2], 3, nil])
[1,2,3]
iex> FlattenArray.flatten([nil, nil])
[]
"""
@spec flatten(list) :: list
def flatten(list) do
flat(list, [])
end
defp flat([], rest), do: rest
defp flat([head | tail], rest) when is_list(head), do: flat(tail, rest ++ flat(head, []))
defp flat([head | tail], rest) when is_nil(head), do: flat(tail, rest)
defp flat([head | tail], rest), do: flat(tail, rest ++ [head])
end