Передача запроса SWI-Prolog из программы Java

1

У меня есть запрос, сгенерированный моей программой Java в Query Variable. Я хочу отправить это в 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. Может ли кто-нибудь предложить мне лучший способ сделать это? Мне нужен вывод выполнения запроса из SWI-Prolog в файле.

  • 0
    Использование ProcessBuilder кажется громоздким способом взаимодействия Java и Prolog. Вы рассматривали возможность использования другого API? stackoverflow.com/q/4303931/1407656
  • 0
    Я нашел JPL, который можно использовать как интерфейс для Java и SWI-Prolog. Но даже это не достаточно информативно ...
Теги:
swi-prolog

1 ответ

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 для генерации вывода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню