2012-04-03 52 views
2

我使用tuProlog到Prolog的與Java集成,但這樣做我心中已經被定義的。特等文件至極包含此代碼:tuProlog未知行爲

go:-write('hello world!'),nl. 

在我的Java文件的NetBeans在我有調用這個主類:

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()); 
} 

此代碼必須返回「世界你好」,但不是它的答案「去」,這個反常行爲的任何想法?

+0

@ProfVersaggi,請幫我解決這個問題! – 2012-04-04 02:39:08

+0

我正要寫出幾乎這個確切的問題! :) – Joe 2013-09-06 11:14:49

回答

1

最後我發現這種行爲不是不穩定的。

解決方法是在調用Solve方法之前添加此代碼。

engine.addOutputListener(新OutputListener(){

 @Override 
     public void onOutput(OutputEvent e) { 
      finalResult += e.getMsg(); 

     } 
    }); 

finalResult它包含由序言寫指令產生的返回的字符串的全局變量。

這就是我的一切ñ如果有任何需要他們實施的課程,請給我寫郵件jrguzman(at)estudiantes(dot)uci(dot)cu

Regards。

0

我不知道tuProlog/Java,但是當從PHP調用Swi-Prolog時,我必須把「停止」作爲謂詞的最終聲明,以告訴Prolog退出並將控制權返還給php。

go:-write('hello world!'),nl, halt. 
1

您的解決方案是(正確)的succeded Prolog的查詢(去/ 0),您所期望的(「世界,你好!」),它是一個內置的輸出,因此你應該檢查的「標準輸出」你的Java引擎。

否則,編寫程序以'返回'變量中的信息。

go(X) :- X = 'hello world!'. 

然後tuProlog將提供訪問實例化變量的方法。