Swi Prolog,卸载源文件

Vit*_*nte 6 file prolog swi-prolog

是否有一个内置谓词或一个简单的方法从prolog的知识数据库中删除已经被咨询过的源文件?我已经阅读了参考手册,但没有找到任何可以做到的事情.

gus*_*bro 5

您可以通过使用source_file/1和的以下过程来做到这一点source_file/2

unload_last_source:-
  findall(Source, source_file(Source), LSource),
  reverse(LSource, [Source|_]),
  unload_source(Source).

unload_source(Source):-
  ground(Source),
  source_file(Pred, Source),
  functor(Pred, Functor, Arity),
  abolish(Functor/Arity),
  fail.
unload_source(_).
Run Code Online (Sandbox Code Playgroud)

unload_source/1废除输入源文件名定义的所有谓词。请注意,它必须是一条绝对路径。

unload_last_source/0 将检索最后查询的文件名并将其卸载。

  • Prolog有几种实现。OP 没有提到他正在使用的 Prolog 系统。此解决方案适用于 SWI-Prolog。它不适用于大多数其他 Prolog 编译器,这些编译器不提供 source_file/1-2 内置谓词和/或允许取消静态谓词。依赖于特定 Prolog 实现的解决方案最好明确标记为这样。 (2认同)