【问题标题】:Prolog term_expansion not workingProlog term_expansion 不起作用
【发布时间】:2016-06-29 11:05:28
【问题描述】:

我正在尝试使用 swipl 执行以下 term_expansion:

a(asda).
a(astronaut).

term_expansion(a(X),b(X)).

但它不起作用,即没有咨询 b/1。我尝试了一些变体:

term_expansion(a(X),[b(X)]).
user:term_expansion(a(X),b(X)).
user:term_expansion(a(X),[b(X)]).
user:term_expansion(user:a(X),[user:b(X)]).

这些都不起作用。有什么问题?

【问题讨论】:

  • 很可能您需要在使用它之前添加term_expansion/2的定义...

标签: prolog


【解决方案1】:

正如@mat 所解释的,您需要在加载要扩展的子句之前定义term_expansion/2 谓词。此外,term_expansion/2 谓词是为 user 伪模块定义的 multifiledynamic 谓词。因此,你应该写:

:- multifile user:term_expansion/2.
:- dynamic user:term_expansion/2.

user:term_expansion(a(X), b(X)).

这将确保您的扩展代码在您将其移入模块时能够正常工作。

如果可移植到具有术语扩展机制的其他 Prolog 系统(顺便说一句,这远非标准),则考虑将术语扩展代码移动到它自己的文件中,在要扩展的源文件之前加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 2017-02-25
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 2015-06-30
    相关资源
    最近更新 更多