tuProlog未知行为

时间:2012-04-03 23:25:27

标签: java prolog tuprolog

我正在使用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',而是关于这种不稳定行为的任何想法?

3 个答案:

答案 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.