【问题标题】:How to get all the clauses defined/loaded from a file in Prolog如何从 Prolog 中的文件中获取定义/加载的所有子句
【发布时间】:2017-10-03 05:34:35
【问题描述】:

我正在使用 SWI Prolog,但很惊讶地发现在 Prolog 中没有明显的方法可以做到这一点。我所追求的是类似于 Clause/2 但允许未实例化的第一个参数(并且特定于给定文件中的子句,即我不想要整个 Prolog 库!)。这是我为找到所有条款而写的内容

clauseX(H,B) :-
    current_predicate(P/Arity),
    functor(H,P,Arity),
    absolute_file_name('filname.pl', AbsFileName),
    predicate_property(H, file(AbsFileName)),
    clause(H,B).

有更简洁的方法吗?

【问题讨论】:

  • 请注意,大多数 Prolog 系统只允许您在动态谓词上使用 clause/2。在最近的 SWI-Prolog 版本的特定情况下,只要将 protect_static_code 标志设置为 false,您就可以在静态谓词上使用 clause/2

标签: prolog swi-prolog


【解决方案1】:

好的,所以我已经能够稍微缩短它,前两个文字不是必需的,这将返回文件 filename.pl 中的子句

clauseX(H,B) :-
    absolute_file_name('filname.pl', AbsFileName),
    predicate_property(H, file(AbsFileName)),
    clause(H,B).

但是我仍然关心这个效率以及是否每次调用clauseX时都必须查阅文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-26
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多