我有一个Prolog文件,在这里我参考了一个知识库并添加了我自己的谓词。我希望有一个谓词,将整个更新的知识库保存到文本文件中。
我尝试过用listing/0来做这件事,但是我似乎不能改变它的输出流。从技术上讲,我可以用portray_clause/2将每个子句分别写到文件中,但我想以更优雅的方式实现这一点。
是否有允许我这样做的谓词/谓词组合?
编辑:I设法将整个知识库输出到如下文件中:
tell('newkb.txt'), listing, told.这实现了我想做的事情,但有一个小缺点:新的newkb.txt文件包含一些自动生成的子句,如果可能的话,我不希望保留这些子句。
如果这是唯一/最好的解决方案,那就随它去吧。但是,如果有一种方法可以导出知识库,而且只有知识库,我真的很想听。
谢谢。
发布于 2017-10-17 20:22:43
listing/0列出了知识库(在默认情况下,来自全局user模块)。user模块中有几个钩子在某种程度上掩盖了这一点。一些是通过事实上的Prolog实践实现的,还有一些是SWI扩展。当然,清单中可以省略它们,但这违反了listing/0最重要的用例:查找知识库中的内容,从而可能导致其本身的混乱。
您可以使用例如(empty只是一个名称)切换到另一个模块
?- module(empty).现在,listing/0将如您所期望的那样工作。
目前还不清楚如何在知识库中加入其他的事实和规则。如果您只是手工添加它们,那么编辑文件并运行?- make.重新加载文件可能会更容易。如果它们是使用assert/retract更新的,您需要像上面这样的模块或者以某种方式枚举您想要保存的部分。
https://stackoverflow.com/questions/46796640
复制相似问题