我正在尝试使用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)]).都不管用。有什么问题吗?
发布于 2016-06-29 14:48:18
正如@mat所解释的,在加载要展开的子句之前,需要定义term_expansion/2谓词。此外,term_expansion/2谓词是为user伪模块定义的多文件和动态谓词.因此,你应该写:
:- multifile user:term_expansion/2.
:- dynamic user:term_expansion/2.
user:term_expansion(a(X), b(X)).这将确保您的扩展代码将工作,如果您将它移动到一个模块。
如果可移植到具有术语扩展机制的其他Prolog系统(顺便说一句,这远不是标准的),那么请考虑将术语扩展代码移到自己的文件中,在要展开的源文件之前加载。
https://stackoverflow.com/questions/38097774
复制相似问题