我在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).
示例为quicksort([3,2,4,1,5], Sorted)
。我几乎画了这个,但我只找到了Small=[2, 1]
列表的轨迹,然后我不能对Big
编号列表做同样的操作。有人能帮我为这段代码画一张图吗?我想了解正在运行的跟踪程序。我真的很感激!
绘制证明树是一个时髦的主题,并没有完全解决。
证明树包含调试时必需的信息,但是从轨迹推断形状并不容易,因为每一步都是用激活号标记。我们的注意力有限,被证明树暴露的大量信息所困扰。
但形状是可以恢复的:例如,一个解析trace并翻译为(例如)Graphviz的DCG。。。
请耐心等待,我会试着发布一些代码。你的问题给了我一个机会来实现我的小型Prolog IDE(loqt)的一个不错的补充。
(我在这里使用我的SW来渲染树)