[erlang-questions] how: Another library flatten function?
Sun Feb 28 22:50:54 CET 2010
On Feb 27, 2010, at 2:58 AM, Bengt Kleberg wrote:
> I have the following list: ["asd",[["Flow","kalle"]],["Sub","F"]]
> I would like to flatten it to: ["asd","Flow","kalle","Sub","F"]
> lists:flatten/1 is too effective. It gives me: "asdFlowkalleSubF"
> Is there another flatten somewhere?
The general form of flatten is going to be
flatten_loop(X, L) when base_case(X) ->
flatten_loop(, L) ->
flatten_loop([H|T], L) ->
flatten_loop(H, flatten_loop(T, L)).
where the first clause of flatten_loop/2 isn't legal Erlang.
The question of interest is "what exactly is the base case"?
If all the strings are non-empty, it's not hard:
flatten_string_list_loop(X = [H|_], L) when is_integer(H) ->
flatten_string_list_loop(X, L) when is_binary(X) ->
flatten_string_list_loop([H|T], L) ->
flatten_string_list_loop(, L) ->
and we let anything else crash.
Allowing empty strings would make the code rather trickier to
develop, although not impossible. I think before looking for
another flatten, the task is to specify what you actually want.
More information about the erlang-questions