[erlang-patches] Add lists:init/1 - got tired of implementing it

Hans Svensson <>
Thu May 2 09:00:11 CEST 2013


You should consider compiling the code before measuring, there is a 
difference in speed...
Also, if you'd done that you would have spotted the error in your 
recursive implementation...

test_sc.erl:66: Warning: this clause cannot match because a previous 
clause at line 65 always matches

Your recursive implementation throws away the whole list immediately, 
which is fast but wrong...

Fixing the recursive implementation and re-running with escript (after 
changing the sizes of the tests into something smaller) I got
reverse_reverse:small_list: 251
reverse_reverse:big_list: 34
recurse:small_list: 6752
recurse:big_list: 7295
sublist:small_list: 295
sublist:big_list: 69

Which shows the severe performance penalty involved for not compiling 
the code... Compiling it yields (with your original test sizes):
reverse_reverse:small_list: 347
reverse_reverse:big_list: 3133
recurse:small_list: 411
recurse:big_list: 4036
sublist:small_list: 635
sublist:big_list: 6175

However, the typical lists on which I'd use init/drop_last, would have 
length < 20

Cheers,
Hans

On 2013-04-30 15:32, Garrett Smith wrote:
> I would use lists:sublist(L, 1, length(L) - 1) for this. I wouldn't
> have given it a second thought.
>
> Presumably there's a concern about performance -- why else would we
> need yet-another-function?
>
> Here's a simple benchmark program that people can experiment with (or improve):
>
> https://github.com/gar1t/erlang-bench/blob/master/drop-last.escript
>
> It includes the original implementation, Fred's, and what I would use (sublist).
>
> Personally, I don't see a problem that warrants a new function in the
> lists module.
>
> On Tue, Apr 30, 2013 at 5:05 AM, Siri Hansen <> wrote:
>> We haven't yet made any decision regarding this patch, but we have had some
>> discussions in the team and we are not totally convinced about the general
>> need for this function. Thus we would appreciate some input from the list.
>>
>> So - disregarding the name and the implementation for a second - is this
>> functionality a good addition to the lists module? Is it often needed?
>>
>> If so, would it be even better to do a more general version which removes
>> the N last elements from the list?
>>
>> Hans, could you also possibly describe some of your use cases?
>>
>> Regards
>> 
>>
>>
>> 2013/4/29 Fredrik <>
>>> On 04/25/2013 05:12 PM, Hans Svensson wrote:
>>>> git fetch git://github.com/hanssv/otp.git add_init_to_lists
>>> Fetched, it is currently located in the 'pu' branch.
>>> A review process has started.
>>> Thanks,
>>>
>>> --
>>>
>>> BR Fredrik Gustafsson
>>> Erlang OTP Team
>>>
>>>
>>> _______________________________________________
>>> erlang-patches mailing list
>>> 
>>> http://erlang.org/mailman/listinfo/erlang-patches
>>
>>
>> _______________________________________________
>> erlang-patches mailing list
>> 
>> http://erlang.org/mailman/listinfo/erlang-patches
>>



More information about the erlang-patches mailing list