50 lines
1.4 KiB
Erlang
50 lines
1.4 KiB
Erlang
%%%-------------------------------------------------------------------
|
|
%%% @author Fabio Salvini <fs@fabiosalvini.com>
|
|
%%% @copyright (C) 2017, Fabio Salvini
|
|
%%% @doc
|
|
%%%
|
|
%%% @end
|
|
%%% Created : 2 Jul 2017 by Fabio Salvini <fs@fabiosalvini.com>
|
|
%%%-------------------------------------------------------------------
|
|
-module(utils).
|
|
|
|
-ifdef(TEST).
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
-endif.
|
|
|
|
%% API
|
|
-export([flatten/1]).
|
|
|
|
%%%===================================================================
|
|
%%% API
|
|
%%%===================================================================
|
|
|
|
%%--------------------------------------------------------------------
|
|
%% @doc
|
|
%% Flattens a list.
|
|
%%
|
|
%% @spec flatten(X) -> list()
|
|
%% @end
|
|
%%--------------------------------------------------------------------
|
|
flatten(X) -> flatten(X,[]).
|
|
|
|
%%%===================================================================
|
|
%%% Internal functions
|
|
%%%===================================================================
|
|
flatten([],Acc) -> Acc;
|
|
flatten([[]|T],Acc) -> flatten(T, Acc);
|
|
flatten([[_|_]=H|T],Acc) -> flatten(T, flatten(H,Acc));
|
|
flatten([H|T],Acc) -> flatten(T,Acc++[H]) .
|
|
|
|
%%%===================================================================
|
|
%%% Tests
|
|
%%%===================================================================
|
|
-ifdef(TEST).
|
|
|
|
flatten_test() ->
|
|
?assertEqual([], flatten([])),
|
|
?assertEqual([1,2,3], flatten([1,2,3])),
|
|
?assertEqual([1,2,3], flatten([[1],[2,3]])).
|
|
|
|
-endif.
|