我使用tuProlog来集成Prolog和Java,为此,我定义了一个包含以下代码的prolog.pl文件:
go:-write('hello world!'),nl. 然后,在我的Java项目中,我有一个调用以下代码的主类:
Prolog engine = new Prolog();
Theory theory = new Theory(new FileInputStream("prolog.pl"));
try {
engine.setTheory(theory);
} catch (InvalidTheoryException ex) {
}
SolveInfo solution = engine.solve("go.");
if (solution.isSuccess()) {
System.out.println(solution.getSolution());
}这段代码应该输出'hello world',但是它输出的是'go',你知道为什么会这样吗?
发布于 2012-04-05 13:58:26
最后发现行为一点也不反复无常:)
解决方案是在调用Solve方法之前添加此代码。
engine.addOutputListener(new OutputListener() {
@Override
public void onOutput(OutputEvent e) {
finalResult += e.getMsg();
}
});finalResult只是一个全局变量,包含Prolog Write指令产生的返回字符串。
发布于 2012-04-04 16:50:51
你的解决方案是(正确的)成功的Prolog查询(go/0),正如你所期望的('hello world!')它是内置的输出,因此您应该检查Java引擎的“stdout”。
否则,将你的程序编码为在变量中“返回”信息。
go(X) :- X = 'hello world!'.然后,tuProlog将提供访问实例化变量的方法。
发布于 2012-04-04 14:43:03
我不知道tuProlog/Java,但当从PHP调用Swi-Prolog时,我必须将'halt‘作为谓词的最后一个语句,以告诉Prolog退出并将控制权返回给php。
go:-write('hello world!'),nl, halt.https://stackoverflow.com/questions/10002906
复制相似问题