// merge_pairs merges
pairs of lists in a list until none is left.
merge_pairs([]) =>
[];
// no more lists
merge_pairs([A]) =>
[A];
// only one list
merge_pairs([A, B | L])
=> [merge(A, B) | merge_pairs(L)];
// merge creates a single
ordered list from two ordered lists
merge(L, []) => L;
merge([], M) => M;
merge([A | L], [B | M])
=>
A <= B ? [A | merge(L, [B | M])] : [B | merge([A | L],
M)];