Программирование в целом с прологом - PullRequest
17 голосов
/ 14 июля 2011

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

%-------------------------------------------------------------------- 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. Заранее спасибо за любую помощь.

Ответы [ 3 ]

12 голосов
/ 14 июля 2011

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

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

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

7 голосов
/ 15 июля 2011

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

4 голосов
/ 14 июля 2011

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

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

http://logtalk.org/

...