Вызов Пролога из R

Можно вызвать R из Пролога, используя библиотеку недавно реализован в вариантах SWI и YAP Prolog.

В свою очередь, есть ли способ вызвать Prolog из R? В отсутствие прямого интерфейса R-Prolog, способного связывать термины Prolog с R так же, как Rcpp связывает объекты C++ с объектами R, существует ли какой-либо косвенный способ достичь этой цели (например, вызов Prolog из кода C++, встроенного в код R, через Rcpp) ?

Под «вызовом» я подразумеваю «связывание» терминов пролога с объектами R, как это возможно для объектов C++ с использованием Rcpp, и выполнение запросов пролога через оболочки функций R, не прибегая к вызовам операционной системы.


person Community    schedule 28.12.2014    source источник
comment
(Я не знаю R для таких деталей, но) общий интерфейс, используемый из командной строки, должен быть достаточно хорош для многих случаев. Или именованные трубы.   -  person false    schedule 29.12.2014
comment
Возможно, я недостаточно точно выразился в том, что имел в виду под «звонком». Я надеюсь, что редакция исправит это.   -  person    schedule 29.12.2014


Ответы (4)


В SWI-Prolog и YAP вы можете использовать библиотеку real, написанную Никосом Ангелопулосом и Витор Коста Сантос.

С помощью этой библиотеки можно не только вызывать R из Пролога, но вы даже можете совместно использовать структуры данных между Прологом и R (например, списки Пролога ‹-> R-матрицы)!

Более ранняя версия была опубликована на PADL 2013. Текущая версия использует некоторые из последних изменений в SWI7, например. использование точки для приложения функции, чтобы сделать интеграцию между SWI-Prolog и R еще более бесшовной.

person Wouter Beek    schedule 29.12.2014
comment
R..eal - это библиотека, на которую ссылается исходный вопрос. Спасибо за ваше предложение, я попробую протестировать «общие» структуры и вернусь с результатами. Однако доступные исследовательские работы даже не предлагают, как инициировать запросы Prolog из R. - person ; 29.12.2014

Вы должны иметь возможность вызывать пролог интерфейса командной строки через system или system2 в R.

Если вы серьезно относитесь к этому, вы можете подумать о написании пакета R с Rcpp, который вызывает prolog через SWI-Prolog.h интерфейс C++.

ps: О боже, я изучил программирование на прологе! Совсем забыл об этом!

person Jeroen    schedule 28.12.2014

Извините, я не программист R... но у меня есть совет: используйте библиотеку HTTP-сервера SWI-Prolog.

Я вижу из быстрого поиска, что R имеет интерфейсы HTTP (с JSON), поэтому количество связующего кода должно быть управляемым. С архитектурной точки зрения построение API в SWI-прологе в настоящее время является предпочтительным путем.

person CapelliC    schedule 29.12.2014

Проверьте эту библиотеку: https://github.com/42n4/rolog разветвлена ​​от пользователя mogodan github. Он может запускать Prolog внутри R.

person 42n4    schedule 23.02.2018