Advertisement
Guest User

Untitled

a guest
Sep 11th, 2013
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 1.19 KB | None | 0 0
  1. -module(nils).
  2.  
  3. -export([
  4.     filter_out_nils/1,
  5.     filter_out_nils_from_list/1,
  6.     filter_out_nils_from_tuple/1,
  7.     extract_first_elements/1
  8.     ]).
  9.  
  10. extract_first_elements(Data) when is_list(Data) ->
  11.     lists:map(fun extract_first_non_tuple_element/1, Data).
  12.  
  13. extract_first_non_tuple_element({})-> {};
  14. extract_first_non_tuple_element(Data) when is_tuple(Data)->
  15.     case element(1, Data) of
  16.         First when is_tuple(First) -> extract_first_non_tuple_element(First);
  17.         Other -> Other
  18.     end.
  19.  
  20. filter_out_nils(Data) when is_list(Data) ->
  21.     Result1 = filter_out_nils_from_list(Data),
  22.     lists:map(fun filter_out_nils_from_tuple/1, Result1).
  23.  
  24. filter_out_nils_from_list(Data) when is_list(Data) ->
  25.     Pred = fun(Element) -> Element /= nil end,
  26.     lists:filter(Pred, Data).
  27.  
  28. filter_out_nils_from_tuple(Data) when is_tuple(Data) ->
  29.     TList = tuple_to_list(Data),
  30.     Fun = fun(Element, Acc) ->
  31.         case Element of
  32.             nil -> Acc;
  33.             Tuple when is_tuple(Tuple) -> Acc ++ [filter_out_nils_from_tuple(Tuple)];
  34.             Other -> Acc ++ [Other]
  35.         end
  36.     end,
  37.     Result = lists:foldl(Fun, [], TList),
  38.     list_to_tuple(Result).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement