Sorting 如何在Prolog中绘制快速排序的运行轨迹图

Sorting 如何在Prolog中绘制快速排序的运行轨迹图,sorting,prolog,quicksort,trace,search-tree,Sorting,Prolog,Quicksort,Trace,Search Tree,我在prolog中有一个快速排序代码: 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), qui

我在prolog中有一个快速排序代码:

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).
例如
快速排序([3,2,4,1,5],排序)
。 我几乎画了这个,但我只找到了
Small=[2,1]
列表的跟踪,然后我不能对
Big
数字列表做同样的操作。 有没有人能帮我画一张这段代码的图表?我想了解程序的运行跟踪。
我真的很感激

绘图证明树是一个时髦的主题,尚未完全解决

证明树包含调试时必需的信息,但 从轨迹推断形状并不容易,因为每一步都很复杂 以激活号码为标志。而且我们的注意力有限,被证明树所暴露的信息量所困扰

但形状是可以恢复的:例如,一个解析跟踪并转换为(例如)Graphviz的DCG

请耐心点,我会试着发布一些代码。你的问题给了我一个机会来实现我的小prologide()的一个很好的补充

(我在这里使用SW渲染树)