[erlang-questions] list:join() for erlang?

Fri Sep 14 04:14:06 CEST 2007

On 14 Sep 2007, at 8:38 am, Bob Ippolito wrote:
> Using ++ all over the place is probably a bad idea, at least according
> to the performance guide and my intuition. I haven't profiled it.

I believe you have misunderstood the performance guide.
When you want to concatenate lists, ++ is the tool for the job.

> This is our join/2, which is largely the same but uses lists:flatten/1
> instead of ++:

But that changes the semantics.  It will accept stuff that I did not
at all wish my code to accept.

> join([S], _Separator) ->
>     lists:flatten(S);

This does *more* copying than the ++ version.

If you are happy with using flatten/1 (as I am not), then a much
simpler approach is

join([], _) -> [];
join([List|Lists], Separator) ->
     lists:flatten([List | [[Separator,Next] || Next <- Lists]]).

This turns [S1,S2,S3,S4]
      into  [S1,[Sep,S2],[Sep,S3],[Sep,S4]]
and then flattens that.

More information about the erlang-questions mailing list