debugging - 如何为 Prolog 使用有效的调试器/跟踪

标签 debugging prolog trace

我对 Prolog 很陌生(开始学习两周左右),我们涉及哈密尔顿路径的作业会让我发疯,尤其是当我调试问题时。在 haskell 中,你可以进行调试跟踪,这样每次函数运行时,它都会输出我想要的任何值,这样我就知道什么进入、什么出去,并猜测数字在哪里出了问题。

Prolog 中是否存在类似的东西?谷歌搜索了一下,但我做错了,因为到目前为止我还没有运气。韦尔普。

最佳答案

有几个选项:

0。 “穷人的痕迹”:不纯的输出

您可以使用不纯谓词(例如format/2)从程序中发出调试信息。

示例:

?- X = 4, format("X is now: ~w\n", [X]).
X is now: 4

这可能与您用其他语言生成的跟踪类似。

这是最不先进和最差的调试方法,也是最流行的。

1。文本跟踪器:trace/0

在您的 Prolog 系统中尝试一下:

?- trace, your_goal.

然后痛苦地单步调试代码。

这肯定会让你尽快发疯。

2。图形跟踪器

一些 Prolog 系统提供图形跟踪器

例如,在 SWI-Prolog 中,尝试:

?- gtrace, your_goal.

图形跟踪器是一个相当复杂的程序,并且本身存在错误

3。声明式调试强烈推荐

总的来说,我强烈建议避免在 Prolog 中进行跟踪。两个独立的控制流程使得这种语言不太适合“单步执行”。好消息是,这也不是很有必要:相反,可以通过推理程序的泛化特化来尝试声明式调试。这使您可以快速确定意外失败和不终止的真正原因。

跟踪总是会引导您按程序思考您的代码,除了跟踪器中的错误之外,您还必须努力解决代码中的错误,同时只能获得很少的洞察力您的程序的实际问题。

例如参见了解更多信息。

关于debugging - 如何为 Prolog 使用有效的调试器/跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42865128/

相关文章:

r - 在group_by中调用cor函数的`The standard deviation is zero`错误

Prolog - 家谱

Azure 云服务(经典)- 将 Diagnostic.Trace 日志记录到 BLOB 存储的任何方式

c# - 链式异常堆栈示例

prolog - 如何访问有向图中的每个点

javascript - 如何使用 ui.perfetto.dev 非交互方式打开 chrome 跟踪文件?

mysql - 是否有用于在 MySQL 中进行调试、分析和跟踪的好工具?

xcode - 如何在调试中查看 NSString 中的文本

c++ - 有没有一种简洁的方法可以将文本输出到调试 Pane ?

prolog - 列表总和必须为 16