从Java程序传递SWI-Prolog查询

时间:2014-04-21 20:34:33

标签: 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的命令没有被发送到SWI-Prolog。 someoe可以告诉我最好的方法吗?我也需要文件中来自SWI-Prolog的查询执行输出。

1 个答案:

答案 0 :(得分:0)

将查询保存到外部文本文件并从命令行执行swipl(设置适当的选项)并将输出重定向到另一个文本文件。然后,读取该输出文件。

示例:

  1. 将您的查询保存为QUERY.TXT :- query.
  2. 运行swipl并重定向到OUTPUT.TXT:swipl -s QUERY.TXT -g halt --quiet > OUTPUT.TXT
  3. 阅读OUTPUT.TXT
  4. 的内容

    此外,我怀疑您应该使用Runtime.getRuntime().exec(...)waitFor(...)的组合来等待swipl生成输出。