Erlang chunk a list into fixed batches
Erlang
-module(chunk_list).
-export([chunk/2]).
chunk(List, N) when is_integer(N), N > 0 ->
chunk(List, N, []).
chunk([], _N, Acc) ->
lists:reverse(Acc);
chunk(List, N, Acc) ->
case take(List, N, []) of
{Chunk, []} -> lists:reverse([Chunk | Acc]);
{Chunk, Rest} -> chunk(Rest, N, [Chunk | Acc])
end.
take(Rest, 0, Acc) -> {lists:reverse(Acc), Rest};
take([], _N, Acc) -> {lists:reverse(Acc), []};
take([H | T], N, Acc) -> take(T, N - 1, [H | Acc]).