【问题标题】:How to draw a diagram for running trace of quicksort in Prolog如何在 Prolog 中绘制运行跟踪快速排序的图表
【发布时间】:2014-10-31 15:44:10
【问题描述】:

我在 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 号码列表做同样的事情。 有没有人可以帮我画出这段代码的图表?我想了解程序的运行跟踪。 我真的很感激!

【问题讨论】:

    标签: sorting prolog quicksort trace search-tree


    【解决方案1】:

    绘制证明树是一个令人着迷的主题,并没有完全解决。

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

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

    请耐心等待,我会尝试发布一些代码。您的问题让我有机会实现对我的小型 Prolog IDE (loqt) 的一个不错的补充。

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

    【讨论】:

      猜你喜欢
      • 2010-12-31
      • 2017-02-15
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 2020-06-20
      相关资源
      最近更新 更多