2013-05-04 2 views
4
인 루프에 대한

어떻게 내가하지만 난 다시 할 수 foreach loop with counter을 읽고쓰기 얼랑

for index, value := range array { 
    F(index, value) 
} 

이동 루프의 아날로그은

for_loop_with_index_and_value(F, L) 

얼랑

의 메소드를 작성하여야한다

lists:foldl(fun(E,Cnt) -> ..., Cnt+1 end, 0, Y) 

따라서 F는 다음 색인을 반환하지 않습니다.

감사합니다. 대단히 감사합니다. 왜

for_loop_with_index_and_value(fun(I, V) -> calc(I, V) end, L) 

작업하지만

for_loop_with_index_and_value(fun calc/2, L) 

가 작동하지 않는 이유는 무엇입니까?

+3

[이 답변] (http://stackoverflow.com/a/4777367/149530) 귀하의 요구 사항에 맞게 것 같습니다. –

답변

3

lists:foldl(fun(E,Cnt) -> ..., Cnt+1 end, 0, Y).을 사용할 수없는 이유는 무엇입니까? 예, 할 수 있습니다 인덱스

for_loop_with_index_and_value(F, L) when is_function(F, 2), is_list(L) -> 
    lists:foldl(fun(E, I) -> F(I, E), I+1 end, 0, L). 

더 일반적으로 foldl : 인덱스

foldli(F, L, Acc0) when is_function(F, 3), is_list(L) -> 
    {_, Result} = lists:foldl(fun(E, {I, Acc}) -> {I+1, F(I, E, Acc)} end, {0, Acc0}, L), 
    Result. 

map :

mapi(F, L) when is_function(F, 2), is_list(L) -> 
    {Result, _} = lists:mapfoldl(fun(E, I) -> {F(I, E), I+1} end, 0, L), 
    Result. 
1

당신은 다음과 같이 재귀 함수를 작성할 수 있습니다. for(I, N, _)

* I: index 
* N: max_value 
* D: increment 

-export([start/0]). 

for(I, N, _) when I == N -> 1; 

    for(I, N, D) when I < N -> 
     io:fwrite("~w~n", [I]), //function body do what ever you want!!! 
     for(I+D, N, D). 
start() -> 
for(0, 4, 2). 

3 PARAM "_" D는 매우 값이 3 PARAM로서 사용될 수 중요하지 않다는 것을 의미한다.