Skip to content

Erlang Lists and Recursion — Tail Recursion and List Processing

DodaTech Updated 2026-06-29 1 min read

In this tutorial, you will learn about Erlang Lists and Recursion. We cover key concepts, practical examples, and best practices to help you master this topic.

Lists are Erlang's primary data structure. Since Erlang has no loops, you Process lists through recursion — often with tail-call optimization for efficiency.

Recursion

%% Sum of list (not tail-recursive)
sum([]) -> 0;
sum([Head | Tail]) -> Head + sum(Tail).

%% Tail-recursive (efficient)
sum_tail(List) -> sum_tail_acc(List, 0).
sum_tail_acc([], Acc) -> Acc;
sum_tail_acc([Head | Tail], Acc) -> sum_tail_acc(Tail, Head + Acc).

%% Map (applies function to each element)
map(_, []) -> [];
map(F, [Head | Tail]) -> [F(Head) | map(F, Tail)].

List Comprehensions

%% [Expression || Generator, Condition]
[X * 2 || X <- [1, 2, 3, 4, 5]].         %% => [2, 4, 6, 8, 10]
[X || X <- [1, 2, 3, 4, 5, 6], X rem 2 == 0].  %% => [2, 4, 6]

%% Cartesian product
[{X, Y} || X <- [1, 2], Y <- [a, b]].
%% => [{1,a}, {1,b}, {2,a}, {2,b}]

lists Module

lists:map(fun(X) -> X*2 end, [1,2,3]).    %% => [2,4,6]
lists:filter(fun(X) -> X > 2 end, [1,2,3,4]).  %% => [3,4]
lists:foldl(fun(X, Acc) -> X+Acc end, 0, [1,2,3]).  %% => 6
lists:sort([3,1,4,1,5]).         %% => [1,1,3,4,5]
lists:reverse([1,2,3]).          %% => [3,2,1]
lists:zip([1,2,3], [a,b,c]).     %% => [{1,a}, {2,b}, {3,c}]

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro