Сортировка больших списков в Прологе: недостаточно памяти

Я пытаюсь отсортировать список элементов 10k в прологе с Bubbleort, и я получаю ошибку локального стека. Mergesort, кажется, лучший вариант, так как я не получаю никаких ошибок для того же ввода. Тем не менее, я бы очень хотел получить время пробега для сортировки пузырьков с большими входными данными, но я не могу. Есть идеи?

Вот код:

 %% NOTE: SWI-PROLOG USED

 %% generate_list(Limit, N, L): - insert upper limit and length of list N
 %% to get a random list with N numbers from 0 to limit
 generate_list(_, 0, []).
 generate_list(Limit, N, [Y|L]):-
    N =\= 0,
    random(0, Limit, Y),
    N1 is N-1,
    generate_list(Limit, N1, L).


 %% bubble(L, Ls, max):- insert list L and get max member of list by
 %% swapping members from the start of L.
 bubble([Z], [], Z).
 bubble([X,Y|L], [X|Ls], Z):- X =< Y, bubble([Y|L], Ls, Z).
 bubble([X,Y|L], [Y|Ls], Z):- X  > Y, bubble([X|L], Ls, Z).

 %% bubble_sort(List, Accumulator, Sorted_List)
 bubblesort([X], Ls, [X|Ls]).
 bubblesort(L, Accumulate, Result):- bubble(L, Ls, Max),
       bubblesort(Ls, [Max|Accumulate], Result).

 bubble_sort(L, Sorted):- bubblesort(L, [], Sorted).

Как вы видите, я использую хвостовую рекурсию. Я также попытался увеличить стеки с помощью:

  set_prolog_stack(global, limit(100 000 000 000)).
  set_prolog_stack(trail,  limit(20 000 000 000)).
  set_prolog_stack(local,  limit(2 000 000 000)).

но это просто работает немного дольше. В конце концов я снова выхожу из локального стека. Должен ли я использовать другой язык, как C иmalloc список или не использовать рекурсию?

Ответы на вопрос(2)

Ваш ответ на вопрос