Linux g ++ Встраивание Prolog Logic Engine в C ++ - PullRequest
4 голосов
/ 15 февраля 2012

У меня есть некоторая логика в программе на C ++, которая не только безумно сложна, она требует нескольких решений, для которых Prolog идеален. Это похоже на скрипт конфигурации брандмауэра, проверяющий ввод для действий, но иногда требуется больше, чем одно действие.

То, что я хочу, выглядит примерно так:

class PrologEngine
{
    LoadLogic(const char* filename) throw PrologException; // Load a file of prolog rules, predicates facts etc in textual format. Must be callable multiple times to load AND COMPILE (for speed) prolog rule files.

    std::vector<std::string> Evaluate(const char* predicate_in_string_form = "execute(input, Result)") throw PrologException; Returns a vector of matching predicates in text form.

};

Нет необходимости перезванивать в C ++.

Кажется, что AMI Prolog его получил, но он недоступен в Linux. Я пытаюсь использовать SWI-Prolog и могу найти только 2 примера и невероятно византийский API (мое мнение)

Может кто-нибудь указать мне пример, близкий к тому, что я ищу?

Ответы [ 2 ]

4 голосов
/ 15 февраля 2012

Существует интерфейс C ++ к SWI-Prolog , это высокий уровень.

Я борюсь с ним , вот пример соединения с OpenGL:

PREDICATE(glEvalCoord1d, 1) {
 double u = A1;
 glEvalCoord1d( u );
 return TRUE;
}

Этот чистый код скрывает много «бизантинизма», используя неявное преобразование типов и некоторый макрос.Интерфейс хорошо проработан и двунаправлен: для вызова Prolog из C ++ есть PlCall («выполнить» запрос, аналогичный «Оценивать», который вы выставляете в ответе) или более структурированный PlQuery для нескольких результатов ...

Если вам не нужна ссылка на openGl или вы можете ждать ответа, который, я надеюсь, я получу из списка рассылки SWI-Prolog, вам следует оценить его.

3 голосов
/ 15 февраля 2012

Если вы не возражаете переписать код пролога для использования в родной библиотеке c ++ только для заголовков, я бы заглянул в библиотеку castor: http://www.mpprogramming.com/cpp/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...