Prolog编程:数据读取与处理的深入探索
1. Prolog意外行为的分析方法
在Prolog编程中,有时会遇到程序出现意外行为的情况。使用Prolog解释器内置的跟踪工具可能会让人感到困惑,因为我们只能看到当前目标,无法同时查看前面的目标或用于满足前面目标的子句指针。一个更好的方法是在运行跟踪时在纸上进行手动计算,这样能更清楚地了解跟踪信息所传达的内容。
例如,我们可以尝试手动计算某些查询,然后使用Prolog调试器跟踪相同的计算过程,并比较结果。同时,还可以检查调试器是否会显示指示每个查询涉及哪些子句的编号。
2. 尾递归优化相关知识
尾递归优化起源于Scheme语言,后来也应用到了Common Lisp和Prolog中。Warren在1986年讨论了尾递归优化的实现,并指出 append
是尾递归的。如果你想了解更多关于通过尾递归表达迭代的艺术,可以参考Abelson和Sussman在1985年的相关研究。
3. Prolog解释器工作原理的资料
若要详细了解Prolog解释器的工作原理,可以依次阅读Hogger(1984:181 - 221)、Maier和Warren(1988)的相关内容,以及Campbell(1984,文章集合)和A¨ıt–Kaci(1991)的研究。
4. 自由格式输入问题
通常,Prolog的输入例程 read/1
要求所有数据都按照Prolog语法编写,但在商业软件的实际应用中,这是不现实的。我们可以让Prolog读取任何格式的数据,甚至可以编写一个程序来读取Lotus .W