首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWI-Prolog -列出要归档的整个知识库

SWI-Prolog -列出要归档的整个知识库
EN

Stack Overflow用户
提问于 2017-10-17 18:15:52
回答 1查看 1.6K关注 0票数 1

我有一个Prolog文件,在这里我参考了一个知识库并添加了我自己的谓词。我希望有一个谓词,将整个更新的知识库保存到文本文件中。

我尝试过用listing/0来做这件事,但是我似乎不能改变它的输出流。从技术上讲,我可以用portray_clause/2将每个子句分别写到文件中,但我想以更优雅的方式实现这一点。

是否有允许我这样做的谓词/谓词组合?

编辑:I设法将整个知识库输出到如下文件中:

代码语言:javascript
复制
tell('newkb.txt'), listing, told.

这实现了我想做的事情,但有一个小缺点:新的newkb.txt文件包含一些自动生成的子句,如果可能的话,我不希望保留这些子句。

如果这是唯一/最好的解决方案,那就随它去吧。但是,如果有一种方法可以导出知识库,而且只有知识库,我真的很想听。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-10-17 20:22:43

listing/0列出了知识库(在默认情况下,来自全局user模块)。user模块中有几个钩子在某种程度上掩盖了这一点。一些是通过事实上的Prolog实践实现的,还有一些是SWI扩展。当然,清单中可以省略它们,但这违反了listing/0最重要的用例:查找知识库中的内容,从而可能导致其本身的混乱。

您可以使用例如(empty只是一个名称)切换到另一个模块

代码语言:javascript
复制
?- module(empty).

现在,listing/0将如您所期望的那样工作。

目前还不清楚如何在知识库中加入其他的事实和规则。如果您只是手工添加它们,那么编辑文件并运行?- make.重新加载文件可能会更容易。如果它们是使用assert/retract更新的,您需要像上面这样的模块或者以某种方式枚举您想要保存的部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46796640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档