我正在尝试使用 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))");
也许是因为所有不工作的查询都在文件中,所以语法的工作方式不同?我不知道,我只是在吐槽。
那么,关于如何查询我创建的模块的任何想法?