Prolog term_expansion不起作用

时间:2016-06-29 11:05:29

标签: prolog

我正在尝试使用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)]).

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

1 个答案:

答案 0 :(得分:2)

正如@mat所解释的那样,您需要在之前定义要扩展的子句的<{1}}谓词。此外,term_expansion/2谓词是为term_expansion/2伪模块定义的多文件动态谓词。因此,你应该写:

user

如果您将扩展代码移动到模块中,这将确保您的扩展代码能够正常工作。

如果可移植到具有术语扩展机制的其他Prolog系统(顺便提一下,远远不是标准的话),那么考虑将术语扩展代码移动到自己的文件,在您要扩展的源文件之前加载。 / p>