2011-01-23 16 views
5

Vorrei aggiungere un contatore in questo ciclo per conoscere la riga di ogni elemento della lista. Hai una soluzione semplice?ciclo foreach con contatore

lists:foreach(fun(X) .... end,Y),

+1

È un po 'meglio indicare il tuo obiettivo piuttosto che ciò che pensi ti aiuterà a raggiungere il tuo obiettivo. Ci sono risposte diverse a seconda di ciò che stai effettivamente cercando di fare. – Dustin

+0

Y = ["abc", "def", "ghi"], elenca: foreach (fun (X) io: write ("stringa ~ w: ~ s, [N, X]) fine, Y), – Bertaud

risposta

10

Usare gli elenchi: foldl o scrivere la propria funzione:

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

Sì Molto bene, infatti non c'è alcuna differenza concettualmente tra foreach e foldl. – Bertaud

2

Se si desidera ripristinare il proprio, questo sembra funzionare come previsto:

foreach_index(F, [H|T]) -> 
    foreach_index(F, [H|T], 0). 

foreach_index(F, [H|T], N) -> 
    F(H, N), 
    foreach_index(F, T, N + 1); 

foreach_index(F, [], N) when is_function(F, 2) -> ok. 

La funzione F verrà chiamato con due parametri: la singola voce dall'elenco e il suo indice.