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

Joh*_*Doe 3 debugging trace prolog

我是Prolog的新手(开始学习两周),涉及汉密尔顿路径的作业会使我发疯,尤其是在调试问题时。在haskell中,您可以执行调试跟踪,以便每次运行函数时,它都会吐出我想要的任何值,因此我知道输入的内容和输出的内容,并猜测数字在哪里。

在Prolog中会存在类似的东西吗?用谷歌搜索,但是我做错了,因为到目前为止我还没有运气。威尔

mat*_*mat 5

有几种选择:

0.“不良人的踪迹”:输出不纯

您可以使用不正确的谓词,例如format/2从程序内部发出调试信息。

例:

?-X = 4,格式(“ X现在是:〜w \ n”,[X])X现在是:4

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

这是最不先进,最差的调试方法,也是最受欢迎的方法。

1.文本跟踪器: trace/0

在您的Prolog系统中尝试以下操作:

?- 跟踪,your_goal。

然后痛苦地浏览代码。

这是确保尽快疯掉的肯定方法。

2.图形示踪剂

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

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

-gtrace,your_goal。

图形示踪剂是一个相当复杂的程序和有缺陷,对自己的

3. 强烈建议进行声明式调试

总体而言,我强烈建议避免在Prolog中进行跟踪。两种独立的控制流程使该语言不太适合“逐步使用”。好消息是,这也不是必须的:相反,请通过对程序的通用性专业性进行推理来尝试进行声明式调试。这使您可以快速确定意外故障和未终止的真正原因。

跟踪总是会导致您对程序进行程序思考,除跟踪程序中的错误外,您还必须努力处理代码中的错误,而对程序的实际问题只有很少的了解。

有关更多信息,请参见示例