2014-04-21 117 views
1

我的查詢變量中有我的Java程序生成的查詢。我想將此發送給SWI-Prolog以獲得此解決方案。下面顯示了我在Java中編寫的與SWI-Prolog進行通信的子代碼。從Java程序中傳遞SWI-Prolog查詢

Process P= new ProcessBuilder("C:\\Program Files\\swipl\\bin\\swipl-win.exe").start(); 
     BufferedReader processOutput = new BufferedReader(new InputStreamReader(P.getInputStream())); 
     BufferedWriter processInput = new BufferedWriter(new OutputStreamWriter(P.getOutputStream())); 

     String commandToSend = Query; 
     processInput.write(commandToSend); 

但SWI-Prolog的窗口打開了,但我寫信給ProcessInput的COMAND沒有被髮送到SWI-Prolog的。艾索可以告訴我做這件事的最好方法嗎?我也需要在SWI-Prolog中的查詢執行的輸出。

+0

使用'ProcessBuilder'似乎是接口的Java和Prolog的一個麻煩的方式。你有沒有考慮過使用不同的API? http://stackoverflow.com/q/4303931/1407656 – toniedzwiedz

+0

我發現可以用作Java和SWI-Prolog的接口的JPL。但即使這樣也不夠豐富...... – AnanthaPadmanabhan

回答

0

保存查詢到外部文本文件和命令行執行swipl(設置相應的選項),並輸出重定向到另一個文本文件。然後,讀取該輸出文件。

例子:

  1. 保存查詢QUERY.TXT爲:- query.
  2. 運行swipl與重定向到OUTPUT.TXT:swipl -s QUERY.TXT -g halt --quiet > OUTPUT.TXT
  3. 的OUTPUT.TXT

還閱讀內容,我懷疑你應該使用Runtime.getRuntime().exec(...)waitFor(...)的組合來等待swipl產生輸出。