2011-01-23 106 views
5

Tôi muốn thêm bộ đếm trong vòng lặp này để biết hàng của từng phần tử trong danh sách. Bạn có một giải pháp đơn giản?vòng lặp foreach với bộ đếm

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

+1

Sẽ tốt hơn một chút khi nêu rõ mục tiêu của bạn thay vì những gì bạn nghĩ sẽ giúp bạn đạt được mục tiêu của mình. Có những câu trả lời khác nhau tùy thuộc vào những gì bạn đang thực sự cố gắng làm. – Dustin

+0

Y = ["abc", "def", "ghi"], danh sách: foreach (vui vẻ (X) io: write ("chuỗi ~ w: ~ s, [N, X]) kết thúc, Y), – Bertaud

Trả lời

10

Sử dụng danh sách: foldl hoặc viết chức năng riêng của bạn:

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

Có Trong thực tế không có sự khác biệt về khái niệm giữa foreach và foldl. – Bertaud

2

Nếu bạn muốn cuộn của riêng bạn, điều này dường như làm việc theo yêu cầu:

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. 

Chức năng F sẽ được gọi với hai tham số - mục nhập riêng lẻ từ danh sách và chỉ mục của nó.

Các vấn đề liên quan