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}]
← Previous
Erlang Functions and Modules — Defining, Exporting, and Organizing Code
Next →
Erlang Concurrency — Spawn, Send, Receive, and Process Linking
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro