2017-02-25 5 views
0

정수리스트에서 가장 높은 정수를 얻기 위해 아래 Erlang 코드를 사용하고 싶습니다만, 어떤 이유로 항상리스트의 마지막 정수를 얻게됩니다. 어떤 도움이 필요합니까?정수 목록에서 erlang에 foldl을 사용하여 최대 정수를 반환하는 방법은 무엇입니까?

솔루션 예 ->test:max([2,8,5,6]). 8을 반환해야하지만,이 코드로는 6

-spec max(L) -> M when 
    L::[integer()], 
    M::integer(). 

max([H | T]) -> 
F = fun(L, Acc) -> max([L]) end, 
lists:foldl(F, H, T). 

답변

1

함수 FLAcc의 최대를 반환해야 반환합니다. 당신은 그것을 위해 내장 max/2 기능을 사용할 수 있습니다 :

... 
F = fun(L, Acc) -> max(L, Acc) end. 
... 

테스트 :

1> F = fun(L, Acc) -> max(L, Acc) end. 
#Fun<erl_eval.12.52032458> 
2> [H | T] = [2, 8, 5, 6]. 
[2,8,5,6] 
3> lists:foldl(F, H, T). 
8 
+0

고맙습니다. –

+0

이 경우 답변을 수락 된 것으로 표시해야합니다. –

1

은 당신이 함수 F에 반환하는 새로운 Acc의 가치, 결국 값 lists:foldl/3가 반환 될 것입니다.

F 내에서 비교를 수행하고 Acc이 현재 값보다 큰지 확인하십시오. 어쨌든 lists:foldl/3의 목록을 반복하므로 max/1을 재귀 할 필요가 없습니다.

실제 코드가 필요한 경우 알려주세요.하지만 직접 알아볼 것을 권해드립니다. 그렇게 재미 있습니다.