2011-01-21 3 views
3

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]. 

답변

4
당신은 예를 들어,이 트릭 사용할 수 있습니다

: 첫 번째 요소를 사용하는 경우

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

당신은 목록을 사용할 수 있습니다 : 예를 들어 그것에 대한 foldl,이 같은 :

lists:foldl(fun([X1,Y1],[X2,Y2]) when X1 + Y1 > X2 + Y2 -> 
       [X1,Y1]; 
       (_, Acc) -> 
       Acc 
      end, [0,0], ListOfLists). 
+3

을 목록의 초기 누적기로 설정하면 항상 좋은 초기 값을 갖게됩니다. – rvirding