Программирование в целом с помощью пролога
Я пытаюсь сохранить модуль 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/