[erlang-questions] Erlang/OTP 21.0-rc1 (Release Candidate)

Alexander Petrovsky askjuise@REDACTED
Wed May 2 21:12:22 CEST 2018


Totally agree with Frans Schneider, the arguments order in different
modules in stdlib differs from one to another. And I think will be better
reorder args in lists:search.

For me much more close approach suggested by Chris Okasaki, short summary
from SO (
https://stackoverflow.com/questions/5863128/ordering-of-parameters-to-make-use-of-currying
):

For languages that support currying and partial-application easily, there
> is one compelling series of arguments, originally from Chris Okasaki:
>
>    - *Put the data structure as the last argument*
>
> Why? You can then compose operations on the data
> <http://www.haskell.org/pipermail/libraries/2005-August/004297.html> nicely.
> E.g. insert 1 $ insert 2 $ insert 3 $ s. This also helps for functions on
> state <http://www.haskell.org/pipermail/libraries/2005-August/004323.html>
> .
> Standard libraries such as "containers" follow this convention
> <http://hackage.haskell.org/packages/archive/containers/0.4.0.0/doc/html/Data-Map.html#g:5>
> .
> Alternate arguments are sometimes given to put the data structure first,
> so it can be closed over, yielding functions on a static structure (e.g.
> lookup) that are a bit more concise. However, the broad consensus seems to
> be that this is less of a win, especially since it pushes you towards
> heavily parenthesized code.
>
>    - *Put the most varying argument last*
>
> For recursive functions, it is common to put the argument that varies the
> most (e.g. an accumulator) as the last argument, while the argument that
> varies the least (e.g. a function argument) at the start. This composes
> well with the data structure last style.


So, the

lists:search(fun/1, list) -> {ok, Value} | false


 will be more appropriate then

lists:search(list, fun/1) -> {ok, Value} | false



>
ср, 2 мая 2018 г. в 16:10, Dmitry Klionsky <dm.klionsky@REDACTED>:

> No, it's fine.
>
> https://github.com/erlang/otp/blob/master/lib/stdlib/src/
> lists.erl#L1402-L1413
>
>
> On 05/02/2018 04:06 PM, Frans Schneider wrote:
> > Is the fun/1 really the second argument in the call lists:search/2?
> >
> > lists:search(list,fun/1) -> {ok, Value} | false
> >
> > Doesn't feel consistent with the other functions in the list module
> > which have the fun/1 as the first argument.
> >
> > Cheers,
> >
> > Frans
> >
> > On 05/02/2018 01:37 PM, Henrik Nord X wrote:
> >> lists:search(list,fun/1) -> {ok, Value} | false
> > _______________________________________________
> > erlang-questions mailing list
> > erlang-questions@REDACTED
> > http://erlang.org/mailman/listinfo/erlang-questions
>
> --
> BR,
> Dmitry
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20180502/56ace9d0/attachment.htm>


More information about the erlang-questions mailing list