首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tuProlog未知行为

tuProlog未知行为
EN

Stack Overflow用户
提问于 2012-04-04 07:25:27
回答 3查看 442关注 0票数 2

我使用tuProlog来集成Prolog和Java,为此,我定义了一个包含以下代码的prolog.pl文件:

代码语言:javascript
复制
go:-write('hello world!'),nl. 

然后,在我的Java项目中,我有一个调用以下代码的主类:

代码语言:javascript
复制
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',你知道为什么会这样吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-05 13:58:26

最后发现行为一点也不反复无常:)

解决方案是在调用Solve方法之前添加此代码。

代码语言:javascript
复制
engine.addOutputListener(new OutputListener() {
        @Override
        public void onOutput(OutputEvent e) {
            finalResult += e.getMsg();

        }
});

finalResult只是一个全局变量,包含Prolog Write指令产生的返回字符串。

票数 2
EN

Stack Overflow用户

发布于 2012-04-04 16:50:51

你的解决方案是(正确的)成功的Prolog查询(go/0),正如你所期望的('hello world!')它是内置的输出,因此您应该检查Java引擎的“stdout”。

否则,将你的程序编码为在变量中“返回”信息。

代码语言:javascript
复制
go(X) :- X = 'hello world!'.

然后,tuProlog将提供访问实例化变量的方法。

票数 1
EN

Stack Overflow用户

发布于 2012-04-04 14:43:03

我不知道tuProlog/Java,但当从PHP调用Swi-Prolog时,我必须将'halt‘作为谓词的最后一个语句,以告诉Prolog退出并将控制权返回给php。

代码语言:javascript
复制
go:-write('hello world!'),nl, halt.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10002906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档