Программирование в целом с помощью пролога

Я пытаюсь сохранить модуль Prolog модульным, и мне было интересно, есть ли у кого-нибудь советы относительно того, как это сделать. То, как я делал это с помощью простых consult s, но это становится громоздким, так как количество моих файлов увеличивается и уступает именам конфликтов. Существует ли какая-либо конструкция, аналогичная конструкции "типичного" импорта, например

%-------------------------------------------------------------------- compiler.pl

[ scanner, parser, codegen ] .

%-------------------------------------------------------------------- compile

% compile( S, I ) :- Compiling the source string S gives the list of instructions
%                    I

compile( S, I ) :- scan( S, T ), parse( T, A ), codegen( A, I ) .

%-------------------------------------------------------------------------------%

в верхней части исходного файла? Если это определенная программа, я использую gprolog. Заранее благодарим за любую помощь.

Ответы

Ответ 1

Получить текущую версию разработки Logtalk, которая обеспечивает полную поддержку стабильной версии GNU Prolog 1.4.0. Вы можете получить его, выполнив проверку Subversion или клон Git (подробнее см. http://logtalk.org/download.html). Или просто напишите мне конфиденциально, и я построю для вас установщик. Logtalk был разработан с нуля для программирования в целом. Вы можете использовать его для написания переносимых приложений (Logtalk работает как есть на девяти различных компиляторах Prolog). Вы даже можете использовать его для запуска кода модуля Prolog в компиляторах Prolog, таких как GNU Prolog, которые не включают модульную систему. Logtalk поставляется с около ста примерами, с портативными библиотеками и полной документацией. Переход от Prolog к Logtalk довольно прост. Запись переносимых кодовых битов портирует каждый день; -)

Ответ 2

GNU-Prolog не имеет подлинной модульной системы, поэтому ваш подход в настоящее время является лучшим, что вы можете получить. Возможно, GNU-Prolog может добавить модульную систему в будущем, но я бы не стал делать ставку на нее.

Самая частая система модулей позволяет определять в разных предикатах модулей с тем же именем и артерией предиката. Таким образом, избегаются столкновения имен предикатов. Атомы и функторы остаются неизменными по границам модулей. Такие системы, как SICStus, YAP, SWI, Ciao, IF и стандарт ISO, имеют такую ​​систему.

Еще один вид модульной системы предлагается основанной на XSB функтором.

Ответ 3

То, что ложно сказано правильно.
Однако вы можете рассмотреть Logtalk, который реализует модульную систему, а также систему OO поверх нескольких прологов (включая GNU-Prolog).

http://logtalk.org/faq.html#general-3

http://logtalk.org/