1

我正在尝试使用 JPL 查询 prolog 文件的动态模块。感谢这个问题( 如何在 jpl 中将文件作为模块查阅),我能够使用声明为这样的 Query 对象来查阅、断言和从模块中撤回:

assertFact = new Query("assert(mod1:"+fact.toString()+")");

retractFact = new Query("retract(mod1:"+fact.toString()+")");

consultQuery = new Query("mod1:consult('"+rulesPath+"')");

但是,我无法使用类似的调用来查询文件中的谓词,例如

legalMovesQuery = new Query("mod1:legal("+playerName+",Move)");

或者

nextQuery = new Query("mod1:next(Role,Action)");

它总是从我同时运行的 prolog 的非模块实例返回结果。我觉得这特别奇怪,因为我能够成功运行这个查询:

dynamicQuery = new Query("mod1:predicate_property(X,dynamic),\\+predicate_property(X,built_in),\\+predicate_property(X,number_of_clauses(0))");

也许是因为所有不工作的查询都在文件中,所以语法的工作方式不同?我不知道,我只是在吐槽。

那么,关于如何查询我创建的模块的任何想法?

4

0 回答 0