Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2013_1 / ОТС / promet.pdf
Скачиваний:
99
Добавлен:
23.02.2015
Размер:
683.47 Кб
Скачать

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).

Соседние файлы в папке ОТС