У меня есть запрос, сгенерированный моей программой 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 в файле.
Сохраните запрос в внешний текстовый файл и выполните swipl
из командной строки (с соответствующими настройками) и перенаправьте вывод в другой текстовый файл. Затем прочитайте этот выходной файл.
Пример:
:- query.
swipl -s QUERY.TXT -g halt --quiet > OUTPUT.TXT
Кроме того, я подозреваю, что вы должны использовать комбинацию Runtime.getRuntime().exec(...)
и waitFor(...)
чтобы ждать swipl для генерации вывода.
ProcessBuilder
кажется громоздким способом взаимодействия Java и Prolog. Вы рассматривали возможность использования другого API? stackoverflow.com/q/4303931/1407656