2011-01-23 21 views
5

Listenin her elemanının sırasını bilmek için bu döngüde bir sayaç eklemek istiyorum. Basit bir çözümün var mı?foreach döngü sayacı

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

+1

Amacınızı elde etmenize yardımcı olacağını düşündüğünüzden ziyade, amacınızı belirtmek biraz daha iyidir. Yapmaya çalıştığınız şeye bağlı olarak farklı cevaplar var. – Dustin

+0

Y = ["abc", "def", "ghi"], listeler: foreach (eğlenceli (X) io: yazma ("string ~ w: ~ s, [N, X]) bitiş, Y), – Bertaud

cevap

10

Kullanım listeleri: foldl veya kendi fonksiyon yazmak: Kendi almak isterseniz gerektiği gibi

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

Evet Çok iyi, aslında foreach ve foldl arasında kavramsal olarak bir fark yoktur. – Bertaud

2

, bu işe görünmektedir:

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. 

işlevi F iki parametre ile çağrılacaktır - listeden ve dizininden bireysel giriş.