Пустой список не нужен. Вы также можете использовать списочные выражения.
splitter(L) -> {[ X || {X, _} <- L], [X || {_, X} <- L]}.
Можно сделать и универсальный
splitter_n(L) ->
list_to_tuple(transpose([tuple_to_list(X) || X <- L])).
transpose([]) -> [];
transpose([[]|_]) -> [];
transpose(L) ->
[[hd(X) || X <- L] | transpose([tl(X) || X <- L])].
В работе
1> c(splitter).
{ok,splitter}
2> splitter:splitter_n([{1,2},{3,4},{5,6}]).
{[1,3,5],[2,4,6]}
3> splitter:splitter_n([{1,2,3},{4,5,6},{7,8,9}]).
{[1,4,7],[2,5,8],[3,6,9]}