我正在尝试使用JPL查询prolog文件的动态模块。感谢这个问题( how to consult file as a module in 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))");
也许是因为所有不起作用的查询都在文件中,所以语法不能以相同的方式工作?我不知道,我只是喋喋不休。
那么,关于我如何能够查询我创建的模块的任何想法?