我在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
数字列表做同样的事情。
有没有人可以帮我绘制这段代码的图表?我想了解程序的运行跟踪。
我真的很感激!
答案 0 :(得分:2)
绘制证明树是一个时髦的主题,并没有完全解决。
证明树包含调试时必不可少的信息,但是 从痕迹中推断出形状并不容易,因为每一步都是如此 以激活号码标记。而且我们的注意力有限,受到证明树所暴露的大量信息的干扰。
但是形状可以恢复:例如,一个解析跟踪并转换为(例如)Graphviz的DCG ......
请耐心等待,我会尝试发布一些代码。你的问题让我有机会实现对我的小Prolog IDE(loqt)的一个很好的补充。
(我在这里使用SW来渲染树)