【发布时间】:2017-10-18 07:39:46
【问题描述】:
我有一个 Prolog 文件,我在其中查阅知识库并添加我自己的谓词。我想要一个谓词,将整个更新的知识库保存到一个文本文件中。
我已尝试使用listing/0 执行此操作,但似乎无法更改其输出流。从技术上讲,我可以使用portray_clause/2 将每个子句分别写入文件,但我想以更优雅的方式实现这一点。
是否有一个谓词/谓词组合可以让我这样做?
编辑:我设法将整个知识库输出到一个文件,如下所示:
tell('newkb.txt'), listing, told.
这实现了我想要做的,但有一个小缺点:新的newkb.txt 文件包含一些自动生成的子句,如果可能的话,我宁愿不保留它们。
如果这是唯一/最好的解决方案,那就这样吧。但是,如果有办法导出知识库,并且只导出知识库,我真的很想听听。
谢谢。
【问题讨论】:
-
我不太清楚你的目标是什么。你能举个例子吗?
-
我有一个 Prolog 文件,我们称之为
Project.pl。在里面我有::- ['knowledgebase.txt'].predicate_1(...) :- ... .predicate_2(...) :- ... .等。我想写一个谓词,它将正在查询的知识库和我在Project.pl文件中编写的谓词输出到另一个文件.实际上,尽管我一直在寻找解决方案将近一个小时,但只要我发布了这个问题,我就设法(几乎完全)通过以下方式做到了这一点:tell('newkb.txt'), listing, told.。但是,这确实添加了许多其他生成的谓词。 -
您应该编辑您的问题并在此处添加所有信息,而不是在 cmets 中。同时... 您的知识库中有多少谓词?如果不是太多,您可以单独列出它们:
tell('newkb.txt'), listing(pred1), listing(pred2), ..., listing(pred-n), told. -
SWI 包含的东西很奇怪。有趣的是,GNU 默认不包含一堆奇怪的东西。
-
@DanielLyons 哈哈,好吧,我只是在追随 OP 的领导。我同意 SWI 包括在做列表时不属于用户的奇怪(无关)的东西。也许他们需要提供一个
listing_of_just_my_stuff谓词。