Erlang, lists: найти элемент с максимумом, определенным забавой - PullRequest
3 голосов
/ 21 января 2011

Модуль lists предоставляет функцию для поиска максимума списка, lists:max(List).

Есть ли такая функция, как lists:maxfun(Fun, List)? Данное удовольствие должно использоваться для всех Элементов, и maxfun должен вернуть этот Элемент вместо значения. Например:

Fun gets [X,Y] and calcs X+Y
lists:maxfun(Fun,[[1,1],[1,2]]} -> [1,2].

Ответы [ 2 ]

4 голосов
/ 21 января 2011

Вы можете использовать, например, этот трюк:

1> F=fun([X,Y]) -> X+Y end.                                  
#Fun<erl_eval.6.13229925>
2> element(2, lists:max([ {F(X), X} || X <- [[1,1],[1,2]]])).
[1,2]
1 голос
/ 21 января 2011

Вы можете использовать для этого списки: foldl, что-то вроде этого:

lists:foldl(fun([X1,Y1],[X2,Y2]) when X1 + Y1 > X2 + Y2 ->
                [X1,Y1];
               (_, Acc) ->
                 Acc
            end, [0,0], ListOfLists).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...