Re: Proposal: add lists:intersperse/2 and lists:intercalate/2

Siraaj Khandkar <[email protected]>
Newsgroups gmane.comp.lang.erlang.general
Message-ID <[email protected]>
Greetings Erlangers,

Nothing serious, just some fun here. I stumbled on the function
"add-between" in Racket stdlib, which reminded me of the lively, lolzy 
debate we had here 5 years ago :-D

     $ racket
     Welcome to Racket v7.9 [bc].
     > (add-between '(a b c d) 0)
     '(a 0 b 0 c 0 d)
     >

https://docs.racket-lang.org/reference/pairs.html#%28def._%28%28lib._racket%2Flist..rkt%29._add-between%29%29


On 3/2/16 12:02 PM, Siraaj Khandkar wrote:
> On 3/2/16 9:47 AM, Jesper Louis Andersen wrote:
>> Hi Erlangers,
>>
>> I'd really like to add two functions to the lists module from Haskell:
>>
>> intersperse(List, Seperator) produces a list where each element is
>> separated by separator, i.e.
>>
>> X = [1,2,3]
>> [1, x, 2, x, 3] = lists:intersperse(X, x),
>>
>> and it's cousin, intercalate(ListOfLists, Separator) is
>> append(intersperse(ListOfLists, Seperator)), i.e,
>>
>> Y = ["a", "b", "c"]
>> "a, b, c" = lists:intercalate(Y, ", "),
>>
>> The implementations are straightforward and easy to write tests for, even
>> property based tests if needed.
>>
>> The rationale for this proposal is that I find myself implementing this
>> function again and again in every project I write, and it is highly
>> generic. It belongs in a typical list module. OCaml libraries add it.
>> Haskell's Data.List has it. I believe Erlang, being a practical language,
>> should have it as well.
>>
>> Thoughts?
> 
> +1
> 
> Though I prefer the name "interleave" to "intersperse", since its 
> meaning is more-precise and closer to the intended behavior here.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.