Prolog 程序调试指南
1. 受限跟踪概述
受限跟踪是调试 Prolog 程序的重要手段。当为某些类型的事件指定了受限跟踪后,每当此类事件发生时,程序会暂停并询问下一步操作。例如:
?- append([a], [b], X).
CALL append([a],[b],_43) ?
程序在输出 “?” 后停止,此时需要从一组可能的选项中选择一个进行回复。若选择的选项使程序继续运行,它将运行到下一个被跟踪谓词的受限事件处,再次询问操作,如:
CALL append([],[b],_103) ?
通常可以选择在终端显示可用选项列表。
2. 检查目标
可以通过不同方式查看目标:
- write :通常作为查看目标的另一种方式。例如:
?- append([a], [b], X).
CALL append([a],[b],<foo>) ?
write
CALL append([a], [b],_103) ?
- write_canonical :当目标包含多个运算符且忘记其优先级时使用,它能清晰显示函子的嵌套结构。
3. 检查祖先目标