ارلنگ
نمونه برنامه‌نویسی تابعی

یک تابع ارلنگ که از توابع بازگشتی برای شمارش تا ده استفاده می‌کند:
-module(count_to_ten).
-export([count_to_ten/0]).

count_to_ten() -> do_count(0).

do_count(10) -> 10;
do_count(N) -> do_count(N + 1).
الگوریتم اجرای فاکتوریل در ارلنگ:
-module(fact). % This is the file 'fact.erl', the module and the filename must match
-export([fac/1]). % This exports the function 'fac' of arity 1 (1 parameter, no type, no name)

fac(0) -> 1; % If 0, then return 1, otherwise (note the semicolon ; meaning 'else')
fac(N) when N> 0, is_integer(N) -> N * fac(N-1).
% Recursively determine, then return the result
% (note the period . meaning 'endif' or 'function end')
%% This function will crash if anything other than a nonnegative integer is given.
%% It illustrates the "Let it crash" philosophy of Erlang.
الگوریتم اجرای فیبوناچی در ارلنگ (توجه داشته باشید: این الگوریتم فقط برای نشان دادن نحوه نگارش ارلنگ است و از نظر زمانی بهینه نیست):
-module(fibonacci). % This is the file 'fibonacci.erl', the module and the filename must match
-export([fib/1]). % This exports the function 'fib' of arity 1

fib(0) -> 0; % If 0, then return 0, otherwise (note the semicolon ; meaning 'else')
fib(1) -> 1; % If 1, then return 1, otherwise
fib(N) when N> 1 -> fib(N - 1) + fib(N - 2).
مرتب‌سازی سریع در ارلنگ، با استفاده از لیست درک مطلب:
%% qsort:qsort(List)
%% Sort a list of items
-module(qsort). % This is the file 'qsort.erl'
-export([qsort/1]). % A function 'qsort' with 1 parameter is exported (no type, no name)

qsort([]) -> []; % If the list [] is empty, return an empty list (nothing to sort)
qsort([Pivot|Rest]) ->
    % Compose recursively a list with 'Front' for all elements that should be before 'Pivot'
    % then 'Pivot' then 'Back' for all elements that should be after 'Pivot'
    qsort([Front || Front <- Rest, Front <Pivot]) ++
    [Pivot] ++
    qsort([Back || Back <- Rest, Back>= Pivot]).
در مثال بالا تابع فراخوانی بازگشتی مرتب‌سازی سریع تا زمانی که چیزی برای مرتب‌سازی باقی نمانده باشد ادامه پیدا می‌کند .

عبارت [Front || Front <- Rest, Front <Pivot] یک لیست درک است، به این معنی «ساخت یک لیست از عناصر Front به‌طوری‌که Front عضو Rest است، و Front کمتر از Pivot است.» ++ عملگر الحاق لیست است.

یک تابع مقایسه می‌توان برای سازه‌های پیچیده‌تر به خاطر خوانایی استفاده می‌شود.

کد زیر لیست‌ها را بر اساس طول مرتب می‌کند:
% This is file 'listsort.erl' (the compiler is made this way)
-module(listsort).
% Export 'by_length' with 1 parameter (don't care about the type and name)
-export([by_length/1]).

by_length(Lists) -> % Use 'qsort/2' and provides an anonymous function as a parameter
   qsort(Lists, fun(A,B) -> length(A) <length(B) end).

qsort([], _)-> []; % If list is empty, return an empty list (ignore the second parameter)
qsort([Pivot|Rest], Smaller) ->
    % Partition list with 'Smaller' elements in front of 'Pivot' and not-'Smaller' elements
    % after 'Pivot' and sort the sublists.
    qsort([X || X <- Rest, Smaller(X,Pivot)], Smaller)
    ++ [Pivot] ++
    qsort([Y || Y <- Rest, not(Smaller(Y, Pivot))], Smaller).
در اینجا، دوباره یک Pivot از اولین پارامتر داده شده به ()qsort گرفته شده‌است و نام لیست rest را Rest قرار داده‌است. توجه داشته باشید که بیان
[X || X <- Rest, Smaller(X,Pivot)]
تفاوتی با حالت زیر ندارد
[Front || Front <- Rest, Front <Pivot]
(در مثال قبل) به جز برای استفاده از یک تابع مقایسه‌ای در آخرین بخش، صدا زدن"ساخت یک لیست از عناصر X به‌طوری‌که X یک عضو از Rest است، و Smaller درست می‌باشد." با Smaller از پیش تعریف شده مانند
fun(A,B) -> length(A) <length(B) end
توجه داشته باشید تابع بی‌نامی که Smaller ، در لیست پارامتر تعریف دوم qsort هست را می‌توان با نامی که در تابع اشاره شده نامید.