Как нарисовать диаграмму для трассировки быстрой сортировки в Прологе

У меня есть код для быстрой сортировки в прологе:

gt(X,Y):- X @> Y.
conc([], List, List).
conc([Head|Tail], List1, [Head|List2]):- conc(Tail, List1, List2).

quicksort([], []).
quicksort([X|Tail], Sorted):-
    split(X,Tail,Small,Big),
    quicksort(Small,SortedSmall),
    quicksort(Big, SortedBig),
    conc(SortedSmall, [X|SortedBig], Sorted).

split(X,[],[],[]).
split(X,[Y|Tail],[Y|Small],Big):-
    gt(X,Y),!,
    split(X,Tail,Small, Big).
split(X,[Y|Tail],Small,[Y|Big]):-
    split(X,Tail,Small,Big).

Пример quicksort([3,2,4,1,5], Sorted), Я почти нарисовал этот, но я нашел только след для списка Small=[2, 1]то я не могу сделать то же самое для списка Big число. Кто-нибудь может помочь мне нарисовать диаграмму для этого кода? Я хочу понять, как работает программа. Я действительно ценю это!

1 ответ

Решение

Рисование деревьев доказательств - увлекательная тема, не совсем решенная.

Деревья проверки содержат информацию, необходимую при отладке, но вывести форму из трассировки непросто, поскольку каждый шаг помечается номером активации. И у нас ограниченное внимание, обеспокоенное огромным количеством информации, которую раскрывает дерево доказательств.

Но форму можно восстановить: например, DCG, которая анализирует трассировку и переводит (например) в Graphviz...

Пожалуйста, будьте терпеливы, я постараюсь опубликовать код. Ваш вопрос дает мне возможность реализовать то, что кажется хорошим дополнением к моей маленькой Prolog IDE ( loqt).

(Я использую свой SW здесь, чтобы сделать дерево)

Другие вопросы по тегам