[erlang-questions] list:join() for erlang?
Kenneth Lundin
kenneth.lundin@REDACTED
Thu Sep 13 08:39:23 CEST 2007
We are considering adding a string:join(ListOfStrings,
SeparatorString) -> String
in the next release. Note that String is a list of integers.
/Kenneth (Erlang/OTP team at Ericsson)
On 9/13/07, Peter K Chan <peter@REDACTED> wrote:
> Yes, the list of lists was what I meant. :)
>
> I wanted Python/Ruby style join, where the function can take any
> arbitrary separator.
>
> I already have the code, so I am looking for either information on where
> to find such functionality in OTP (if it is hidden in some obscure
> module), or to suggest that such a function be added to lists or strings
> by OTP.
>
> Peter
>
> -----Original Message-----
> From: erlang-questions-bounces@REDACTED
> [mailto:erlang-questions-bounces@REDACTED] On Behalf Of ok
> Sent: Wednesday, September 12, 2007 6:01 PM
> To: erlang-questions Questions
> Subject: Re: [erlang-questions] list:join() for erlang?
>
> On 13 Sep 2007, at 4:26 am, Peter K Chan wrote:
>
> > Sorry that I made an omission.
> >
> > I was referring to the variant of join which takes a separator. For
> > example: lists:join("abc", "/"), which evaluates to "a/b/c".
>
> Should that have been join(["a","b","c"], "/")?
>
> There are filename:join/2 and filename:join/1 functions which come
> close to what you want, but they are specialised to file names and
> do stuff you may not want. On the other hand, if, as the slash
> suggests, you are pasting file names together, then filename:join/1
> is EXACTLY what you want.
>
> Otherwise, if what you are after is the Python join(words, sep)
> function, you want the code below. As you note, it isn't that hard
> to write, but then, neither are most of the functions in the lists
> and string modules. This doesn't depend on the element type, so it
> could go in the lists module, but considering its likely uses, it
> probably belongs in the string module.
>
> % join([X1,...,Xn], Sep) -> X1 ++ Sep ++ ... ++ Sep ++ Xn;
> % join([], _) -> [].
> % The intended type is join([[x]], [x]) -> [x].
>
> join([X|Xs], []) -> join0(X, Xs);
> join([X|Xs], [C]) -> join1(X, C, Xs);
> join([X|Xs], Sep) -> join2(X, Sep, Xs);
> join([], _) -> [].
>
> join0(X, [Y|Ys]) -> X ++ join0(Y, Ys);
> join0(X, []) -> X.
>
> join1(X, C, [Y|Ys]) -> X ++ [C|join1(Y, C, Ys)];
> join1(X, _, []) -> X.
>
> join2(X, Sep, [Y|Ys]) -> X ++ (Sep ++ join2(Y, Sep, Ys));
> join2(X, _, []) -> X.
>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
>
More information about the erlang-questions
mailing list