SWI-Prolog的调试

 时间:2024-10-12 01:55:59

在学习Prolog的递归、列表之前,我们得先了解一下它的运行原理和调试。调试是排除程序中错误的过程,它是一种非常复杂的过程,特别是当开发的程序很长很复杂的时候更是如此,在这种情况下,明智的作法是把一个大程序分成许多较小的程序分别进行测试和调试。Prolog为用户提供了一系列的调试谓词,它们允许程序在执行的同时追踪Prolog的搜索过程。

SWI-Prolog的调试

2、盒子模型把一个谓词想象为一个盒子,Prolog解释程序的控制流通过这个盒子。如图所示,盒子的四个角上稳中有降有四个进、出端口,这些端口的含义分别是:CALL:Prolog为满足某个目标进入盒子时扬经过的端口;EXIT:Prolog在目标得到满足(即匹配成功)后离开盒子时所经过的端口;FAIL:Prolog在目标未能满足(即匹配失败)时退出盒子所经过的端口;REDO:Prolog为了再次满足某个目标进行回溯时,重新进入盒子的端口。

SWI-Prolog的调试

4、如果我们提出询问-? fish(X).程序执行所经过的路线如图所示。从图中可以看到,所要萍踪的总体目标fish(X)用最大的,即最外面的盒子A表示,子目标covered(X, scales)和invertebrate(X)分别用里面的两个盒子表示(盒子B和盒子C)。

SWI-Prolog的调试

调试谓词

1、载入程序文件后,为了实现调试功能,应当在运行程序前,在提示符“?-”后键入命令:trace.在某些版本的Prolog中,调试采用spy命令。调试程序对每个调用都在括号中给出一个数字。该数字表示调用的“深度”,即初始目标调用期间所做的目标调用次数。还需注意的是,变量用下划线和紧接其后的数字表示。在调试方面,感觉SWI-Prolog隐藏了一些东西,不如GNU Prolog直观。图中“?”后的信息为用户键入的,其他为显示信息,在得出第一个答案后,要按“;”搜索另一个答案,其他按回车或“c”就可以继续。

SWI-Prolog的调试
  • windows server 2003 服务器怎么新建发布网站
  • MyEclipse卸载后安装失败解决办法
  • npm代理如何设置npm网络链接失败如何设置
  • virtualbox打开已存在的virtualbox虚拟机
  • 由于目标计算机积极拒绝,无法连接。
  • 热门搜索
    额头上长痘痘怎么办 淘宝会员名怎么修改 报道怎么写 怎么能怀孕 牙龈出血怎么治疗 在家怎么做蛋糕 最近股市行情怎么样 家长意见怎么写最简单 花生酱怎么吃 爱奇艺怎么退出账号