Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пролог.doc
Скачиваний:
15
Добавлен:
10.11.2018
Размер:
1.44 Mб
Скачать

7.19. Библиотеки Turbo Prolog’а

Штатные средства языка Турбо Пролог достаточны только для того, чтобы писать на нем учебные программы. Для решения научных задач их недостаточно, поэтому разработчики программного обеспечения дополняют эти средства специальными библиотеками программ. Для использования например BGI-графики, т.е. стандартной Borland-графики в Турбо Прологе необходимо в разделе constants определить маршрут для bgi-модулей в виде

Constants bgi_path=”e:\\prolog\\bgi”

где указывается каталог, в котором находятся bgi-модули, затем подключить модуль описаний

include”e:\\prolog\\programs\\GRAPDECL.PRO”.

После этого в предикате необходимо инициализировать графику предикатом

initgraph(detect, 0, Graphdriver, Graphmode, bgi_path).

После такой инициализации становятся доcтупными предикаты стандартной Borland-графики, например:

  • arc(x, y, beg, end, r) – дуга с центром в (х, у), с углом (end-beg) и радиусом r.

  • line(xstart, ystart, xend, yend) – линия с начальной и конечной точками.

  • circle(x, y, r) – круг с центром в точке (х, у) и радиусом r.

  • rectangle(x1, y1, x2, y2) – прямоугольник с координатами противоположных вершин.

  • outtextxy(x, y, Title) – вывод текста Title, начиная с точки (х, у).

  • Полный список доступных операторов можно найти в справке Help.

  • Пример организации движения слов в Прологе.

  • сonstants

  • bgi_path=”e:\\prolog\\prolog\\bgi”

  • include “e:\\prolog\\prolog\\programs\\GRAPDECL.PRO”

  • Predicates

  • dvig(integer, string)

  • dvi(integer, string)

  • goal

  • initgraph(detect, 0, GraphDriver, PraphMode, bgi_path), setbkcolor(3), setcolor(12),

  • settextstyle(0, 0, 3), outtextxy(10, 50, “волк”), outtextxy(10, 70, “коза”), outtextxy(10, 90, «капуста»),

  • outtextxy(10, 110, “один”), getimage(10, 50, 100, 70,X), dvig(1, X),

  • getimage(10, 70, 100, 90, Y), dvig(1, Y), getimage(10, 90, 100, 110, Z), dvi(500, Z), readchar(_),

  • closegraph.

  • clauses

  • dvig(500,_).

  • dvig(A,X):–putimage(A, 0, X, 1), putimage(A, 0, X, 1), A1=A+1, A<500, dvig(A1, X).

  • dvi(1,_).

  • dvi(A,X):–putimage(A, 0, X, 1), putimage(A, 0, X, 1), A1=A-1, A>1, dvi(A1, X).

7.19. Модульное программирование

Программа в Turbo Prolog’е может состоять из отдельных модулей. Модули могут быть описаны, отредактированы отдельно, а затем связаны в программу. В модулях все имена и области значений считаются локальными (локальный – иначе местный), т.е. в разных модулях можно использовать одинаковые имена.

Всякий модуль определяется посредством своего первого имени (без типа файла). Все модули входят в одну программу, которая называется проект. Имя проекта должно быть задано в начале каждого модуля следующим предикатом:

Project «newproject» – уникальное (свое) имя

Файл, содержащий проект, имеет специальное расширение prj. Среди модулей, входящих в проект, только один модуль может иметь имя «global.pro» (обязательно – это главный)

Если программа состоит из модулей, то Turbo Prolog ищет заданные, определяющим словом Project, имена модулей, которые должны быть обработаны. Для этого необходимо, чтобы в библиотеке имелся специальный файл, который имеет имя librarian и который содержит список имен модулей в виде: имя1 + имя2 + имя3+ …

Для составления этого файла в меню SETUP имеется подменю librarian. При создании проекта автоматически создается символьная таблица, которая сохраняется в файле obj – оглавление и имеет расширение sym.

Для компиляции и связывания модулей должны быть выполнены следующие условия.

  1. Всякий модуль должен начинаться с директивы Project.

  2. Только один модуль может иметь имя global.pro.

  3. Только один из модулей может иметь раздел goal.

  4. Модули должны компилироваться с опцией to obj.

Последний модуль компилируется с to exe. В этом случае автоматически запускается редактор связи и создается исполнимая программа. Редактировать, значит связать все файлы в единое целое.

Процесс связывания можно реализовать с помощью файла проекта и ВАТ-файла PLINK следующим образом:

PLINK NEW proj, где NEW PROJ –имя проекта файла.

PLINK может быть использована из под DOS. В ней могут быть заданы групповые имена, т.е. параметры %1, %2, %3 (вместо % можно ставить имя):

%1 – имя проекта или модуля,

%2 – имя устройства и путь, задающий оглавление, в которое будет записан exe файл,

%3 – имя устройства и путь к каталогу, где располагаются следующие программы: prolog.lib, init. Obj.

При запуске из Turbo Prolog’а в режиме автоматического связывания эти параметры принимают следующие значения:

  1. имя проекта или программы,

  2. текущий путь exe оглавления системы Turbo Prolog,

  3. текущий путь оглавления Turbo Prolog’а.

При запуске из-под DOS обязательно следует задать первый параметр. По умолчанию 2 и 3 параметры будут использовать текущие оглавления. Команда PLINK проверяет существует ли файл с расширением sym и выбирает связывать проект или редактировать один объектный файл.

Программы, которые взаимодействуют через границы модулей, должны использовать предикаты из специальной секции: global predicates, и иметь общие данные из секции: global domains.

При описании глобальных предикатов они записываются в следующем виде:

predicate (d1, d2,…dn) – (f, f, f)(f, f,…f), где d1, d2,…dn – глобальные области значений, группа f – задает потоковый шаблон.

Каждый модуль исходного проекта должен содержать одни и те же глобальные предикаты и одну и ту же глобальную область значений. Поэтому его записывают в один файл и подключают ко всем остальным с помощью оператора include.

Тогда общая структура модуля будет иметь следующий вид:

domains

global domains

database

predicates

global predicates

goal

clauses

Запишем пример содержимого файла проекта под именем coma.prj

main1+

delo+

и два файла *.pro

main1.pro

project «coma»

global domains

text=string

global predicates

write1(text)

predicates

turbo

goal

turbo

clauses

turbo:–write(“gggg”).

Файл delo.pro

project «coma»

global domains

text=string

global predicates

write1(text)-(i)

clauses

write1(X):–write(X).

Все файлы следует поместить в каталог, где находится файл prolog.exe со всеми своими модулями. Затем производится компиляция в режиме compile project. Откомпилированные модули записываются в директорию, куда распределяются файлы EXE (туда помещаются файлы coma.exe, coma.sym, delo.obj, main1.obj).