我正在尝试使用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)]).
这些都不起作用。有什么问题?
答案 0 :(得分:2)
正如@mat所解释的那样,您需要在之前定义要扩展的子句的<{1}}谓词。此外,term_expansion/2
谓词是为term_expansion/2
伪模块定义的多文件和动态谓词。因此,你应该写:
user
如果您将扩展代码移动到模块中,这将确保您的扩展代码能够正常工作。
如果可移植到具有术语扩展机制的其他Prolog系统(顺便提一下,远远不是标准的话),那么考虑将术语扩展代码移动到自己的文件,在您要扩展的源文件之前加载。 / p>