我正在使用tuProlog将Prolog与Java集成,为此我已经定义了一个包含此代码的.pl文件:
go:-write('hello world!'),nl.
在我的NetBeans Java文件中,我有一个调用它的主类:
Prolog engine = new Prolog();
Theory theory = new Theory(new FileInputStream("facultad.pl"));
try {
engine.setTheory(theory);
} catch (InvalidTheoryException ex) {
}
SolveInfo solution = engine.solve("go.");
if (solution.isSuccess()) {
System.out.println(solution.getSolution());
}
本守则必须返回'hello world',但不是回答'go',而是关于这种不稳定行为的任何想法?
答案 0 :(得分:1)
你的解决方案是(正确)成功的Prolog查询(go / 0),你期望的('hello world!')它是内置的输出,因此你应该检查Java引擎的'stdout'。
否则,将程序编码为“返回”变量中的信息。
go(X) :- X = 'hello world!'.
然后tuProlog将提供访问实例化变量的方法。
答案 1 :(得分:1)
最后我发现这种行为不是不稳定。
解决方法是在调用Solve Method之前添加此代码。
engine.addOutputListener(new OutputListener(){
@Override
public void onOutput(OutputEvent e) {
finalResult += e.getMsg();
}
});
finalResult它是一个全局变量,它包含由Prolog Write指令生成的返回String。
如果有任何需要他们的实施,那就是我已经上过课了我只给我写了一封邮件jrguzman(at)estudiantes(dot)uci(dot)cu
问候。
答案 2 :(得分:0)
我不知道tuProlog / Java,但是当从PHP调用Swi-Prolog时,我必须将'halt'作为谓词的最终语句,告诉Prolog退出并将控制权返回给php。
go:-write('hello world!'),nl, halt.