Как правило, с такими проблемами вам нужно переключиться на рекурсивный способ мышления вместо итеративного подхода, который вы используете.Вот что я хотел бы сделать:
take(List, N) ->
take(List, N, []).
take(_List, 0, Acc) ->
lists:reverse(Acc);
take([H|T], N, Acc) ->
take(T, N - 1, [H|Acc]).
Люди, приезжающие из языков, которые продвигают итеративный подход, очень часто пытаются попробовать этот подход в Erlang.Проблема в том, что у Эрланга нет примитивов для этого, так как это функциональный язык.Таким образом, вы вынуждены сделать это функциональным способом, и в конце концов это часто более элегантный подход.