Если вы хотите бросить свой собственный, это работает, как требуется:
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.
Функция F
будет вызываться с двумя параметрами - отдельной записью из списка и ее индексом.