[erlang-questions] Question about reverse list of recursion functions

Joe Armstrong <>
Sun Dec 27 22:57:53 CET 2015


On Sun, Dec 27, 2015 at 11:12 AM, Dmitry Kolesnikov
<> wrote:
> Hello,
>
> The reverse is acceptable if you are using lists:reverse/1 (this is built-in function written in C).
>
> There is an alternative, you can use lists:foldr function to avoid unnecessary reverse operation:

Which introduces an unnecesary tuple construction and deconstruction
which may or may not be faster...

At the end of the day an algorithm is fast enough or not so - you have to
measure to find out. You should choose the simplest correct algorithm
that is sufficiently fast.

Cheers

/Joe


>
> ```
>
> divide_to_lesser_and_bigger(List, X) ->
>    lists:foldr(fun(E, Acc) -> lesser_or_bigger(E, X, Acc) end, {[], []}, List).
>
> lesser_and_bigger(E, X, {Lesser, Bigger}) when E < X ->
>    {[E|Lesser], Bigger};
> lesser_and_bigger(E, _, {Lesser, Bigger}) ->
>    {Lesser, [E|Bigger]}.
>
> ```
>
> - Dmitry
>
>
>
>> On Dec 27, 2015, at 5:38 AM, Andrey Koleshko <> wrote:
>>
>> Hi, guys! I recently started to learn Erlang (migrating from Ruby) by reading “Erlang Programming” Cesarini book. After the 3rd chapter there is a task to implement quick sort and I implemented it like this: https://gist.github.com/ka8725/f3fcc264e12bcefa6035
>> It works well, but I have a question that doesn’t allow to sleep me - is it normal practice to do `reverse` every time when you have an list with opposed direction after a few recursions calls? Is there are other practice to avoid it? Thanks!
>> ________________
>> Best Regards,
>> Andrey Koleshko
>> 
>>
>>
>>
>> _______________________________________________
>> erlang-questions mailing list
>> 
>> http://erlang.org/mailman/listinfo/erlang-questions
>
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions


More information about the erlang-questions mailing list