Re: Add lists:init/1 - got tired of implementing it
Hans Svensson <[email protected]>
| Newsgroups | gmane.comp.lang.erlang.patches |
|---|---|
| Message-ID | <[email protected]> |
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 <[email protected]> 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 >> siri@otp >> >> >> 2013/4/29 Fredrik <[email protected]> >>> 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 >>> [email protected] >>> http://erlang.org/mailman/listinfo/erlang-patches >> >> >> _______________________________________________ >> erlang-patches mailing list >> [email protected] >> http://erlang.org/mailman/listinfo/erlang-patches >> _______________________________________________ erlang-patches mailing list [email protected] http://erlang.org/mailman/listinfo/erlang-patches