Bubblesort em Erlang

Bubblesort é bastante não intuitivo em Erlang com suas listas e estilo recursivo de programação. Durante a noite, escrevi uma função bubblesort em erlang com base no exemplo fornecido aqui
http://tinyurl.com/bng9ku2 (link para um pdf com exercícios em erlang)

O código é fornecido como abaixo

 %the func prototype exposed 
bubblesort
(Alist,N) -> bubblesort([],Alist,0,N).
%all items are sorted
bubblesort
(Curlist,Alist,X,N) when X == N -> Alist;
%only largest item is in the temp list. In that case move it to the
%mainlist and proceed with the next item
%(akin to i++ in the outerloop in C)
bubblesort
(Curlist,[H],X,N) -> bubblesort( [], Curlist ++ [H] , X+1,N);
% a[i] > a[j] . Swap them
bubblesort
(Curlist,[A,B|T],X,N) when A > B -> bubblesort(Curlist ++ [B] , [ A |T ] , X,N);
%a[i] <= a[j] . append a[i] to the temp list
bubblesort
(Curlist,[A,B|T],X,N) -> bubblesort(Curlist ++ [A] , [ B | T] , X ,N).

Note
que usei [Somelist] ++ [Someitem] que pode ser caro quando alguma lista é muito grande. É aconselhável não usá-lo embora eu tenha feito aqui porque não consegui encontrar outra maneira