- •Руководство пользователя турбо пролог 2.0.
- •Часть 1: Введение в Турбо Пролог 2.0 18
- •Часть 2. Изучение турбо пролога 2.0 44
- •Глава 3. Основы пролога 44
- •Глава 4. Программы турбо пролога 65
- •Глава 5. Унификация и поиск с возвратом. 84
- •Глава 6. Простые и составные объекты 116
- •Глава 7. Повтор и рекурсия 132
- •Глава 8. Списки и рекурсия 160
- •Глава 9. Внутренняя база данных турбо пролога 180
- •Глава 10. Трассировка и отладка 189
- •Часть 3. Описание турбо пролога 2.0 203
- •Глава 11. Арифметические вычисления и сравнения 203
- •Глава 12. Запись, чтение и файлы 215
- •Глава 13. Обработка строк в турбо прологе 240
- •Глава 14. Окна в ваших программах 249
- •Глава 15. Система внешних баз данных 269
- •Глава 16. Программирование на системном уровне 298
- •Глава 17. Графический интерфейс borland 309
- •Глава 18. Примеры программ 347
- •Глава 19. Сложные приемы программирования 365
- •Введение
- •О Прологе
- •Для чего может быть использован Турбо Пролог?
- •Чем Турбо Пролог отличается от других языков?
- •Минимальные требования к системе
- •Поддерживаемое оборудование
- •О руководствах по Турбо Пролог 2.0
- •Том I: Руководство пользователя
- •Рекомендуемая литература
- •Используемые шрифты
- •Торговые марки.
- •Как связаться с фирмой Borland.
- •Часть 1 введение в турбо пролог 2.0 глава 1. Установка турбо пролога 2.0
- •Что хранится на ваших дисках
- •Теперь сделаем резервные копии
- •Установка Турбо Пролога на вашу систему
- •Установка на систему с гибкими магнитными дисками
- •Установка на жесткий диск
- •Использование данного руководства
- •Глава 2. Начало
- •Загрузка Турбо Пролога
- •Краткое руководство по меню и "горячим" клавишам.
- •Главное меню
- •Спускающиеся меню
- •"Горячие" клавиши и командные клавиши
- •"Горячие" клавиши главного меню
- •Командные клавиши редактора
- •Командные клавиши компиляции
- •Стирание текста
- •Манипулирование текстовыми блоками
- •Ваша первая программа на Турбо Прологе
- •Ввод вашей программы в редактор
- •Корректирование ввода
- •Просмотр в редакторе
- •Запуск вашей программы
- •Что происходит, когда вы делаете синтаксическую ошибку
- •Сохранение вашей программы на диске
- •Просмотр файлов на диске
- •Трассирование вашей программы
- •Пользователям с гибкими магнитными дисками: создание автономных программ.
- •Контроль установки системы
- •Часть 2. Изучение турбо пролога 2.0 глава 3. Основы пролога
- •ПрОграммирование в лоГике
- •Предложения: Факты и Правила.
- •Факты: То что известно
- •Правила: То что вы можете получить из заданных фактов
- •Запросы
- •Совместное задание фактов, правил и запросов
- •Переменные: основные положения
- •Упражнения
- •Из естественного языка в программы на Прологе
- •Упражнения
- •Предикаты (связи)
- •Переменные (обобщенные предложения)
- •Как переменные получают свои значения
- •Анонимные переменные
- •Цели (запросы)
- •Составные цели: Конъюнкция и Дизъюнкция
- •Комментарии
- •Что такое Сопоставление?
- •Глава 4. Программы турбо пролога
- •Основные секции программы на Турбо Прологе
- •Секция предложений
- •Секция предикатов
- •Как объявить предикат пользователя
- •Имена предикатов
- •Аргументы предикатов
- •Секция доменов
- •Примеры.
- •Секция цели
- •Подробнее о декларациях и правилах
- •Задание типов аргументов при декларации предикатов
- •Упражнения
- •Арность (размерность)
- •Синтаксис правил
- •Ключевое слово Пролога "if" и "if" в других языках
- •Автоматическое преобразование типов
- •Другие секции программы
- •Секция базы данных
- •Секция констант
- •Глобальные секции
- •Директивы компилятора
- •Директива include
- •Директивы trace и shorttrace
- •Глава 10 подробно объясняет трассирование, однако еще до того, как
- •Глава 5. Унификация и поиск с возвратом.
- •Сопоставление и унификация
- •Поиск с возвратом.
- •Поиск всех решений
- •Упражнение на поиск с возвратом.
- •Детальный обзор поиска с возвратом.
- •Четыре основных принципа поиска с возвратом.
- •Поиск с возвратом для внутреннего целевого утверждения
- •Управление поиском решений.
- •Использование предиката fail.
- •Упражнения.
- •Прерывание поиска с возвратом: отсечение.
- •Как использовать отсечение.
- •Предотвращение поиска с возвратом к предыдущей подцели в правиле.
- •Предотвращение поиска с возвратом к следующему предложению.
- •Детерминизм и отсечение.
- •Пример, использующий отсечение
- •Предикат not.
- •Упражнения.
- •Пролог с процедурной точки зрения.
- •Как представлять факты и правила в качестве процедур
- •Использование правил для условного ветвления (case).
- •Представление проверки в правиле.
- •Отсечение как goto.
- •Возврат вычисленного значения.
- •Глава 6. Простые и составные объекты
- •Простые объекты данных.
- •Переменные как объекты данных.
- •Константы как объекты данных.
- •Литеры.
- •Составные объекты данных и функторы
- •Унификация составных объектов.
- •Использование знака равенства для унификации составных объектов.
- •Рассмотрение нескольких значений как единое целое.
- •Примеры использования функторов.
- •Пример использования составных объектов.
- •Упражнение.
- •Объявление доменов составных объектов.
- •Запись определений доменов: Обзор.
- •Многоуровневые составные объекты.
- •Пример, иллюстрирующий структуру предложения.
- •Упражнения.
- •Определения составных смешанных доменов.
- •Аргументы множественных типов.
- •Сравнение составных объектов.
- •Глава 7. Повтор и рекурсия
- •Процесс повторения
- •Снова поиск с возвратом
- •Упражнение
- •Предварительные и последующие операции
- •Упражнение
- •Использование поиска с возвратом в замкнутых системах
- •Упражнения
- •Рекурсивные процедуры
- •Что же все-таки делает компьютер?
- •Преимущества рекурсии
- •Оптимизация хвостовой рекурсии
- •Как задать хвостовую рекурсию
- •Упражение
- •Как избежать хвостовой рекурсии
- •На помощь приходит команда "cut"
- •Использование аргументов в качестве переменных цикла
- •Упражнения
- •Рекурсивные структуры данных
- •Деревья - как типы данных
- •Обход дерева
- •Создание дерева
- •Бинарные поисковые деревья
- •Сортировка на основе дерева
- •Упражнения
- •Глава 8. Списки и рекурсия
- •Что такое списки?
- •Объявление списков
- •Голова и хвост списка
- •Работа со списками
- •Использование списков
- •Печать списков
- •Упражнение
- •Подсчет элементов списка
- •Упражнение
- •Хвостовая рекурсия
- •Упражнение
- •Другой пример - изменения в списках
- •Снова о хвостовой рекурсии
- •Еще об изменении списков
- •Принадлежность к списку
- •Упражнение
- •Объединение одного списка с другим: декларативное и процедурное программирование
- •Рекурсии с процедурной точки зрения
- •Упражнение
- •Один предикат может иметь несколько вариантов использования
- •Упражнение
- •Немедленный поиск всех решений
- •Составные списки
- •Упражнение
- •Грамматический разбор списков
- •Заключение
- •Глава 9. Внутренняя база данных турбо пролога
- •Использование внутренней базы данных
- •Объявление внутренней базы данных
- •Обновление внутренней базы данных
- •Занесение фактов во время исполнения
- •Удаление фактов во время выполнения программы
- •Удаление нескольких фактов сразу
- •Считывание новых фактов из файла во время выполнения программы
- •Сохранение базы данных с фактами во время работы программы
- •Примеры
- •Глава 10. Трассировка и отладка
- •Синтаксическая проверка
- •Трассировка
- •Директива трассировки
- •Пример использования директивы trace
- •Трассировка в режиме оптимизации: shorttrace
- •Трассировка указанных предикатов
- •Пример использования директивы shorttrace
- •Сохранение результатов трассировки
- •Предикат trace
- •Пример использования предиката trace
- •Диалоговое управление трассировкой
- •Состояние ( Status )
- •Окно Трассировки ( Trace Window )
- •Окно Редактора ( Edit Window )
- •Предикаты, с особым значением в режиме трассировки
- •Упражнение по трассировке
- •Директивы компилятора, используемые для отладки
- •Директивы check_determ и nondeterm
- •Упражнение
- •Директива diagnostics
- •Директива nowarnings
- •Собщения об ошибках во время выполнения программы
- •Опции компилятора из меню
- •Integer Overflow Check (Проверка целого)
- •Stack Check (Проверка стека)
- •Часть 3. Описание турбо пролога 2.0 глава 11. Арифметические вычисления и сравнения
- •Арифметические выражения
- •Операции
- •Порядок вычислений
- •Функции и предикаты
- •Генератор случайных чисел
- •Предикат random/1
- •Предикат random/2
- •Целочисленная и вещественная арифметика
- •Равенство и предикат равенства
- •Упражнения
- •Сравнение символов, строк и идентификаторов
- •Символы
- •Идентификаторы
- •Примеры, демонстрирующие предикат write
- •Упражнение
- •Предикат writef/*
- •Турбо Пролог распознает следующие спецификаторы формата поля f:
- •Примеры форматного вывода
- •Предикат readln/1
- •Предикаты readint/1, readreal/1 и readchar/1
- •Предикат readterm/2
- •Предикат file_str/2
- •Предикат inkey/1
- •Предикат keypressed/0
- •Предикат unreadchar/1
- •Примеры
- •Упражнение
- •Открытие и закрытие файлов
- •Предикат openread/2
- •Предикат readdevice/1
- •Предикат writedevice/1
- •Примеры
- •Работа с файлами
- •Примеры
- •Предикат eof/1
- •Предикат flush/1
- •Предикат existfile/1
- •Предикат deletefile/1
- •Предикат renamefile/2
- •Предикат disk/1
- •Расширение базы данных с помощью файлов
- •Работа с фактами, как с термами
- •Примеры
- •Глава 13. Обработка строк в турбо прологе
- •Обработка строк
- •Основные предикаты управления строкой
- •Frontchar/3
- •Fronttoken/3
- •Frontstr/4
- •Concat/3
- •Str_lеn/2
- •Str_char/2
- •Str_int/2
- •Str_real/2
- •Upper_lower/2
- •Примеры.
- •Глава 14. Окна в ваших программах
- •Основные операторы управления окном.
- •Задание атрибутов экрана дисплея.
- •Черно-белый дисплей.
- •Цветной дисплей.
- •Makewindow/8
- •Пример.
- •Shiftwindow/1
- •Clearwindow/0
- •Removewindow/0
- •Cursor/2
- •Пример.
- •Игра в угадывание слов с использованием окон.
- •Усовершенствованные предикаты обработки окон.
- •Textmode/2
- •Makewindow/11
- •Existwindow/1
- •Gotowindow/1
- •Removewindow/2
- •Resizewindow/0
- •Resizewindow/4
- •Пример.
- •Framewindow/1
- •Framewindow/4
- •Colorsetup/1
- •Scr_char/3
- •Scr_attr/3
- •Field_str/4
- •Field_attr/4
- •Window_str/1
- •Window_attr/1
- •Простая игра.
- •Использование редактора и dir из программы.
- •Editmsg/8
- •Edit/2 и edit/13
- •Аргументы предиката edit.
- •Display/1
- •Пример доступа к редактору и каталогу.
- •Заключение.
- •Глава 15. Система внешних баз данных
- •Внешние базы данных в Турбо Прологе.
- •Обзор: что такое внешние базы данных?
- •Соглашения об именовании.
- •Селекторы внешних баз данных.
- •Домены, связанные с внешними базами данных.
- •Указатели базы данных.
- •Домен ref.
- •Обработка целых баз.
- •Db_create/3
- •Db_open/3
- •Db_copy/3
- •Db_openinvalid/3
- •Db_flush/1
- •Db_close/1
- •Db_delete/1
- •Db_garbagecollect/1
- •Db_btrees/2
- •Db_chains/2
- •Db_statistics/5
- •Обработка цепочек.
- •Chain_inserta/5 и chain_insertz/5
- •Chain_insertafter/5
- •Term_replace/4
- •Term_delete/3
- •Ref_term/4
- •Пример полной программы.
- •B-деревья.
- •Страницы, порядок и длина ключа.
- •Двойные ключи.
- •Множественный просмотр.
- •Стандартные предикаты для b-деревьев
- •Bt_create/5
- •Bt_open/3
- •Bt_clost/2 и bt_delete/2
- •Bt_statistics/8
- •Key_insert/4 и key_delete/4
- •Key_first/3, key_last/3 и key_search/4
- •Key_next/3 и key_prev/3
- •Key_current/4
- •Пример: Доступ к базе данных через b-деревья
- •Программирование внешних баз данных
- •Просмотр базы данных
- •Вывод содержания базы данных
- •Создание защищенной базы данных
- •Обновление базы данных
- •Использование внутреннего указателя b-дерева.
- •Использование key-search с дублируемыми ключами
- •Изменение структуры базы данных.
- •Глава 16. Программирование на системном уровне
- •Доступ к операционной системе
- •System/1
- •System/3
- •Пример:
- •Envsymbol/2
- •Date/3 и time/4
- •Пример.
- •Comline/1
- •Операции на уровне бит
- •Bitnot/2
- •Bitand/3
- •Bitor/3
- •Bitxor/3
- •Bitleft/3
- •Bitright/3
- •Упражнение:
- •Доступ к аппаратуре: поддержка низкого уровня.
- •Bios/3 и bios/4
- •Ptr_dword/3
- •Membyte/3 и memword/3
- •Port_byte/2
- •Примеры:
- •Глава 17. Графический интерфейс borland
- •Что такое bgi?
- •Несколько слов о видео режимах.
- •Несколько слов о полях вывода (графических окнах).
- •Файл grapdecl.Pro
- •Как начинать
- •Инициализация и выключение системы bgi
- •Предикаты
- •Initgraph/5
- •Detectgraph/2
- •Getgraphmode/1
- •Getmaxmode/1
- •Graphdefaults/0
- •Closegraph/0
- •Restorecrtmode/0
- •Текущая позиция (тп)
- •Getlinesettings/3
- •Окружности
- •Circle/3
- •Getarccoords/6
- •Прямоугольники, многоугольники и полосы.
- •Rectangle/4
- •Bar3d/6
- •Drawpoly/1
- •Fillpoly/1
- •Setfillpattern/2
- •Getfillpattern
- •Floodfill/3
- •Пример заполнения области.
- •Управление цветом.
- •Палитра
- •Цвет фона и цвет рисования.
- •Управление цветом в cga.
- •Низкое разрешение cga.
- •Высокое разрешение cga.
- •Предикаты палитры cga.
- •Управление цветом в ega.
- •Управление цветом в дисплеях системы rgb.
- •Предикаты
- •Шрифты: загружать или компоновать
- •Предикаты
- •Settstyle/3
- •Setusercharsize/4
- •Пример использования различных видов текста
- •Экраны и поля вывода.
- •Предикаты.
- •Setviewport/5
- •Getviesettings/5
- •Управление пикселами и образами
- •Предикаты
- •Ограничения на использование драйвера 8514.
- •Использование bgi
- •Графические драйверы и символьные шрифты.
- •Программа, загружающая драйверы
- •Построение и запуск загружаемых .Exe файлов
- •Сообщения bgi об ошибках
- •Новые драйверы bgi
- •Задача выбора кратчайшего пути
- •Приключения в опасной пещере
- •Моделирование элементов аппаратуры
- •Ханойские башни.
- •Деление слов на слоги
- •Проблема расстановки n ферзей
- •Использование клавиатуры.
- •Чтение и распознавание клавиш
- •Простой редактор полей
- •Применение предиката inkey
- •Глава 19. Сложные приемы программирования
- •Ошибки, исключительные ситуации и прерывания
- •Обработка исключительных ситуаций, связанных с ошибками
- •Exit/o и exit/1
- •Errorsg/4
- •Обработка ошибок при чтении термов
- •Consulterror/3
- •Readtermerror/2
- •Управление режимом break
- •Break/1
- •Breakpressed/0
- •Углубленный контроль ошибок в .Exe файлах
- •Criticalerror/4
- •Fileerror/2
- •Анализ потока параметров
- •Контроль потока параметров
- •Ссылочные типы
- •Объявление ссылочных типов
- •Ссылочные типы и массив trail
- •Применение ссылочного типа
- •Динамическое отсечение
- •Примеры
- •Применение ссылочных типов при реализации бинарных деревьев
- •Сортировка с помощью ссылочных типов
- •Стиль программирования
- •Определение1
- •Определение 2
- •Определение 3.
- •Использование предиката fail
- •Детерминизм и отсечение
Предикаты
В этом параграфе мы дадим краткое описание каждого предиката BGI,
которые используются при инициализации и выключении графической системы.
Более полное описание и примеры использования можно найти в разделе Стан-
дартных Предикатов в Справочном руководстве по Турбо Прологу.
Initgraph/5
initgraph инициализирует систему BGI и должен быть исполнен перед
любой попыткой использования BGI.
initgraph(GrDriver, GrMode, NewDriver, NewMode, DriverPath)
/*(i,i,o,o,i)*/
Аргумент GrDriver целый, но вы можете задать одну из констант, при-
веденных ниже (они определены в файле GRAPDECL.PRO).
Таблица 17.2 Значения GrDriver, описанные в GRAPDECL.PRO
---------------------------------------------------------------
Константа GrDriver Значение
---------------------------------------------------------------
detect 0 (требуется автоматическое определение)
cga 1
mcga 2
ega 3
ega64 4
egamono 5
ibm8514 6
hercmono 7
att400 8
vga 9
pc3270 10
----------------------------------------------------------------
Целая переменная GrMode определяет начальный графический режим (если
GrDriver не равна detect, в противном случае GrMode устанавливается рав-
ным максимальному разрешению для определенного драйвера, а NewMode явля-
ется границей для этого значения). Переменная NewDriver возвращает значе-
ние ID для драйвера. Вы можете задать GrMode значение, использующее конс-
танты из GRAPDECL.PRO.
Таблица 17.3 Графические драйверы и режимы, поддерживающие BGI
----------------------------------------------------------------
Графический Режимы Значение Разрешение Палитра Колич.
драйвер столб*строк страниц
----------------------------------------------------------------
CGA cgaC0 0 320*200 C0 1
cgaC1 1 320*200 C1 1
cgaC2 2 320*200 C2 1
cgaC3 3 320*200 C3 1
cgaHI 4 640*200 2 цвета 1
MCGA mcgaC0 0 320*200 C0 1
mcgaC1 1 320*200 C1 1
mcgaC2 2 320*200 C2 1
mcgaC3 3 320*200 C3 1
mcgaMED 4 640*200 2 цвета 1
mcgaHI 5 640*200 2 цвета 1
EGA egaLO 0 640*200 16 цветов 4
egaHI 1 640*350 16 цветов 2
EGA64 ega64LO 0 640*200 16 цветов 1
ega64HI 1 640*350 4 цвета 1
EGA-MONO egaMONOHI 0 640*350 2 цвета 1*
egaMONOHI 1 640*350 2 цвета 2**
IBM8514 ibm8514LO 0 640*480 256 цветов 1
ibm8514HI 1 1024*768 256 цветов 1
HERC hercMONOHI 0 720*348 2 цвета 2
ATT400 att400C0 0 320*200 C0 1
att400C1 1 320*200 C1 1
att400C2 2 320*200 C2 1
att400C3 3 320*200 C3 1
att400MED 4 640*200 2 цвета 1
att400HI 5 640*200 2 цвета 1
VGA vgaLO 0 640*200 16 цветов 2
vgaMED 1 640*350 16 цветов 2
vgaHI 2 640*480 16 цветов 1
PC3270 pc3270HI 0 720*350 2 цвета 1
* 64K on egaMONO card
**256K on egaMONO card
----------------------------------------------------------------