
- •1. ИСПОЛЬЗОВАНИЕ ЯЗЫКА ПРОЛОГ
- •2. ЛОГИЧЕСКИЕ ОСНОВЫ ЯЗЫКА ПРОЛОГ
- •2.1. Представление знаний и фактов
- •2.2. Исчисления логического типа
- •2.3. Исчисление резольвент
- •3. МЕХАНИЗМ РАБОТЫ ИНТЕРПРЕТАТОРА ПРОЛОГ-МАШИНЫ
- •Трассировка доказательства теоремы
- •4. ЯЗЫК ПРОЛОГ
- •4.1. Объявления
- •4.2. Данные и константы
- •Типы данных в Прологе
- •4.3. Управление возвратом
- •5. ВСТРОЕННЫЕ ПРЕДИКАТЫ И ФУНКЦИИ
- •5.1. Арифметические вычисления
- •5.2. Ввод и вывод
- •5.3. Текстовые окна и управление экраном
- •5.4. Обработка строк и преобразование типов
- •5.5. Базы данных
- •5.6. Вспомогательные средства
- •6. МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
- •ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА ПРОЛОГ
∙halt(+Status) – выйти из программы в ОС;
∙protocol(+File) – начать протоколирование работы в файле;
∙noprotocol – закончить протоколирование;
∙sleep(+Time) – приостановить работу на время.
6. МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ
При создании сложных программных комплексов необходимо редактировать и компилировать раздельно различные модули про граммы. Для поддержки модульного программирования в Turbo-Pro log есть две возможности: компоненты (projects) и глобальные объ явления.
Компоненты описываются в специальном библиотечном файле, содержащем список имен модулей вида:
<имямодуля1> + <имямодуля2> + ...
Модули должны быть помещены в файлы с расширением PRJ, что можно сделать, задав опцию Modullist в подменю команды Files. При трансляции модуля создается файл с расширением SYM, со держащий таблицу символов для компоновщика. Подключение мо дуля производится директивой project "DOSFile", задающей имя файла с модулем типа PRJ. Глобальные домены и предикаты поз воляют объявлять имена, используемые в различных модулях. Объявление глобальных предикатов включает указания на способ использования параметра (входной или выходной) и имеет вид :
<имяпредиката>(<имядомена>, ... , <имядомена>) – (f, ..., f)... ,
где f принимает значение i или o в зависимости от возможного ис пользования параметра соответственно как входного или выходно го. Число групп может быть произвольным.
Каждый транслируемый модуль должен начинаться с директив: project <имямодуля>
include <глобописания>,
где файл глобальных описаний содержит описания доменов и пре дикатов. Следует помнить, что только единственный модуль может содержать раздел целей (goal), здесь же описываются и используе мые базы данных. Модули транслируются с опцией "Compile to OBJ" или "Compile to EXE", но более предпочтительна последняя, по
скольку позволяет исполнять транслированные программы. Если ограничена память ЭВМ, то лучше транслировать в объектный код. В этом случае компоновка выполняется командой PLINK <файл>.
Для программирования сложных систем в языке определены интерфейсы с программами на языках PASCAL, C, FORTRAN и Ас семблер. Связь устанавливается описанием глобальных предика тов, как указано в примере:
global predicates add(integer,integer,integer)–(i,o,i),(o,i,i) language C scaner (string,string)–(i,o) language Pascal
Система автоматически поддерживает все необходимые интер фейсы по вызову подпрограмм, передаче и преобразованию пара метров и т.д.
Компоновка таких программ должна производиться из OBJфайлов командой LINK операционной системы, например :
LINK INIT + MYPROLOG + MYASSEM + MYPROLOG.SYM, EX EPROG, PROLOG
В системе SWI-Prolog модульное программирование реализует ся распределением текста программы по различным файлам. Файлы могут содержать как тексты аксиом, так и модули. Модули позволяют скрыть от других программ некоторые детали реализа ции.
Объявление модуля в файле имеет первое предложение вида
:– module(+Module, –PublicList),
задающее имя модуля и список доступных другим программам пре дикатов с их арностью. Например, следующий файл с именем "MIN MAX.pl" содержит объявление модуля.
module(minmax, [ min_list/2, max_list/2]). min_list([A|[]], A):–!.
min_list ([A|Tail],Res):–min_list (Tail,Res2),A>Res2,Res=Res2. min_list ([A|_],A).
max_list ([A|[]], A):–!.
max_list ([A|Tail],Res):–max_list (Tail,Res2),A<Res2,Res=Res2. max_list ([A|_],A).
Ссылки на используемые модули производятся предикатом use_module(+File) или use_module(+File, +ImportList).