Skip to content

Instantly share code, notes, and snippets.

@et
Created September 21, 2016 23:02
Show Gist options
  • Save et/e0de23f49d685e47995a5639ffeae679 to your computer and use it in GitHub Desktop.
Save et/e0de23f49d685e47995a5639ffeae679 to your computer and use it in GitHub Desktop.
defmodule CitrusByte do
@moduledoc """
Provides the `flatten/1` function to flatten a List
"""
@doc """
Flattens a List
## Examples
iex> CitrusByte.flatten([[1,2,[3]],4])
[1,2,3,4]
"""
@spec flatten(List.t) :: List.t
def flatten([]), do: []
def flatten([head|tail]), do: flatten(head) ++ flatten(tail)
def flatten(head), do: [head]
end
defmodule CitrusByteTest do
use ExUnit.Case
doctest CitrusByte
test "flatten" do
assert [1,2,3,4] == CitrusByte.flatten([1,2,3,4])
assert [1,2,3,4] == CitrusByte.flatten([[1,2,[3]],4])
assert [1,2,3,4] == CitrusByte.flatten([[1,[2,[3]]],4])
assert [] == CitrusByte.flatten([])
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment