Как отразить истинное/ложное значение, которое Пролог возвращает после запроса

Я хотел бы задать вопрос. Я попытался соединить php с SWI-Prolog с помощью функции exec, и мои усилия увенчались успехом. Мне удалось запросить пролог через php, и я смог повторить ответ Пролога.

То, что я хочу сделать, но не могу понять, как это сделать, - это повторить возврат истинного/ложного пролога.

Давайте предположим, что у меня есть простой файлknowledge_base.pl со следующими фактами и правилами:


girl(erin).
boy(john).
likes(erin,reading).
likes(john,reading).
hangs_out_with(erin,X) :- likes(X,reading), boy(X), writeln('Someone s got a new friend!!').

Учитывая приведенную выше простую базу знаний, можно создавать запросы и отвечать прологом.

Например:

?- girl(erin). Prolog based on our knowledge base will respond true.
?- girl(john). Prolog based on our knowledge base will respond false.
?- hangs_out_with(erin,john). Proslog will respond : Someone s got a new friend!! true.

Мне нужно, чтобы PHP повторил истинный или ложный ответ. Как я могу этого добиться?

Заранее спасибо за вашу помощь.


person Erin    schedule 14.09.2012    source источник
comment
Я запутался в вашем вопросе. Exec возвращается, у кого-то появился новый друг!! истинный. а ты просто хочешь правды?   -  person Zeritor    schedule 14.09.2012
comment
Здравствуй, Зенитор. ТОЛЬКО exec возвращает У кого-то появился новый друг, когда пользователь запрашивает hangs_out_with(erin,john). Я ТАКЖЕ хочу, чтобы истина была отражена эхом.   -  person Erin    schedule 14.09.2012
comment
Вы можете попробовать shell_exec, я предполагаю, что я никогда не использовал его с прологом, но он должен выводить все, что выводит пролог, в виде массива. Возможно, стоит проверить, есть ли у него дополнительная информация.   -  person Zeritor    schedule 15.09.2012
comment
@Zeritor Я попробовал shell_exec, как вы предложили, и массив ТОЛЬКО возвращает У кого-то появился новый друг !!. Он не выводит истинное значение, которое я хочу. Я ценю ваши усилия, чтобы помочь мне найти ответ.   -  person Erin    schedule 15.09.2012
comment
почему бы вам не попробовать посмотреть исходный код возвращаемой html-страницы? Может быть небольшой шанс, что пролог вернет то, что вы хотите, но ответ содержит недопустимые символы для html, поэтому он не виден.   -  person dr.doom    schedule 16.09.2012
comment
@dr.doom, когда я использую командную строку для выполнения запроса в прологе, она не возвращает значение true/false. Если есть команда writeln, она отлично выполняется, но НИКОГДА не выводит пролог true/false после каждого выполнения запроса.   -  person Erin    schedule 16.09.2012
comment
@ Эрин, может быть, просто так был разработан SWI Prolog. Можете ли вы заставить Пролог выводить значение true или false по мере необходимости (прошло много времени с тех пор, как я использовал Пролог)? Таким образом, программа на Прологе будет выглядеть так, как будто она говорит правду. истинный. или ложный. ложный. но, по крайней мере, вы сможете использовать exec, чтобы захватить один из них?   -  person Zeritor    schedule 17.09.2012
comment
@Zeritor Я уже пробовал это. Хотя я был доволен решениями, которые я придумал, я понял, что если ответов больше одного, и пользователь хочет ввести ; знак Я должен придумать способ, которым Пролог будет делать паузу, смотреть, есть ли ввод, а затем снова выводить истинное или ложное эхо. girl(X). X=erin ; X=mary и т. д. С одной стороны, я хочу, чтобы отображалось значение true/false, но, с другой стороны, мне интересно, стоит ли вообще все эти хлопоты... :(   -  person Erin    schedule 17.09.2012
comment
Если вы хотите автоматически выполнить запрос и проанализировать его вывод в PHP, откуда взялся этот user???? Нет пользователя, который мог бы нажать кнопку ;. Если вы разрешите это, ваш скрипт остановится и будет ждать, пока кто-нибудь не нажмет эту кнопку. Вряд ли вы хотели бы, чтобы это было частью вашего веб-сервиса, верно? Если вам нужны все решения для вашего предиката, ознакомьтесь с предикатами всех решений в документе SWI.   -  person Will Ness    schedule 19.09.2012
comment
@Уилл Несс, это отличная идея! Я мог бы использовать предикат для сбора всех решений и отображения их пользователю. Первоначально я хотел, чтобы пользователь выполнял запросы, и если есть более одного ответа, я хотел, чтобы пользователь вводил ; чтобы увидеть следующий ответ. :)   -  person Erin    schedule 20.09.2012