Daily Archives: August 4th, 2007

for loops in erlang

For loops in Erlang:

for(Max, Max, F) -gt; [F(Max)];
for(I, Max, F) -gt; [F(I)|for(I+1, Max, F)].

My I suggest instead either:

lists:each(lists:seq(Min, Max), F).

or:

for(I, Max, F) when I <= Max ->
  for_impl(I, Max, F, []).
for_impl(Max, Max, F, Acc) ->
  lists:reverse(Acc);
for_impl(I, Max, F, Acc) ->
  for_impl(I+1, Max, F, [F(I)|Acc].

The original version of this code will blow out the stack with non-trivial length [...]