
- •Справочное руководство по турбо прологу 2.0
- •Глава 2. Элементы языка 50
- •Глава 3. Интерфейс с другими языками 75
- •Часть 2. Стандартные предикаты 91
- •Часть 3. Приложения 250
- •Введение
- •Дистрибутивные диски
- •Рекомендуемая литература:
- •Часть 1. Руководство программиста по турбо прологу глава 1. Система меню турбо пролога
- •Пользователям Турбо Пролога 1.X
- •Структура меню Турбо Пролога
- •Выбор элементов меню.
- •"Горячие" клавиши.
- •Системные окна и строки помощи
- •Окно редактирования.
- •Как войти в окно редактирования
- •Компоненты окна редактирования
- •Как выйти из окна редактирования.
- •Окно трассировки
- •Окно сообщений
- •Диалоговое окно
- •Строка помощи
- •Главное меню.
- •Окно редактирования.
- •Окно вспомогательного редактирования (Xedit).
- •Окно просмотра.
- •Изменение размера окон.
- •Просмотр окон
- •Создание нового файла.
- •Загрузка существующего файла.
- •Команды редактора.
- •Сохранение исходного текста в файле.
- •Запись исходного текста на диск
- •Вспомогательный редактор
- •Меню и команды
- •Меню файлов (Files)
- •Загрузка файлов (Load)
- •"Указка" (Pick)
- •Новый (New)
- •Выход (Quit)
- •Команда редактирования (Edit)
- •Команда запуска (Run)
- •Меню компиляции (Compile)
- •Память (Memory)
- •Меню опций (Options)
- •Опции компоновки (Link Options)
- •Стек (Stack)
- •Область ссылок (Trail Array)
- •"Куча" (Heap)
- •Контроль во время исполнения (Run-time check)
- •Цвета (Colors)
- •Размер окна (Window size)
- •Каталоги
- •Текущий каталог (Current directory)
- •Авто-загрузка сообщений (Avto-Load Message)
- •Режим экрана (Screen mode)
- •Конфигурация клавиатуры (Keyboard Configuration)
- •Перемещение курсора (Cursor movement)
- •Глава 2. Элементы языка
- •Ключевые слова.
- •Специальные предикаты.
- •Разделы программы.
- •Раздел доменов (domains).
- •Стандартные домены.
- •Списковые домены.
- •Домены составных объектов.
- •Файловый домен.
- •Специально заданные предопределенные домены.
- •Сокращение объявлений доменов.
- •Объявление ссылочных доменов.
- •Раздел предикатов (predicates).
- •Раздел базы данных (database).
- •Раздел предложений (clauses).
- •Простые константы.
- •Переменные.
- •Составные объекты.
- •Списки - Специальный вид составных объектов.
- •Раздел констант.
- •Условная компиляция.
- •Включение файлов в вашу программу.
- •Директивы компилятора.
- •Управление памятью в Турбо Прологе.
- •Экономия ресурсов памяти.
- •Управление распределением памяти.
- •Генерирование выполняемых программ.
- •Модульное программирование.
- •Проекты.
- •Глобальные объявления.
- •Глобальные домены.
- •Глобальная база данных.
- •Глобальные предикаты.
- •Компиляция и компоновка модулей.
- •Пример.
- •Глава 3. Интерфейс с другими языками
- •Вызов других языков из Турбо Пролога.
- •Что делать перед вызовом.
- •Объявление внешних предикатов.
- •Вызов соглашений и передача параметров.
- •Соглашение об обозначениях
- •Использование ключевого слова as
- •Вызов процедуры, написанной на Си из Пролога.
- •Опции компилятора Турбо Си и компоновка.
- •Вызов программ на языке ассемблера из Турбо Пролога.
- •Использование внутреннего ассемблера Турбо Си.
- •Вызов Турбо Пролога из других языков.
- •Динамическое распределение памяти.
- •Передача составных объектов в другие языки.
- •Передача списков.
- •Передача структур.
- •Примеры.
- •Обработка списков.
- •Программирование на низком уровне.
- •Часть 2. Стандартные предикаты
- •Arc/5 Графика
- •Bar/4 Графика
- •Bt_close/2 Внешняя База Данных
- •Bt_create/5 Внешняя База Данных
- •Bt_delete/2 Внешняя База Данных
- •Bt_open/3 Внешняя База Данных
- •Bt_statistics/8 Внешняя База Данных
- •Chain_delete/2 Внешняя База Данных
- •Chain_first/3 Внешняя База Данных
- •Chain_inserta/5 Внешняя База Данных
- •Chain_insertafter/5 Внешняя База Данных
- •Chain_insertz/5 Внешняя База Данных
- •Chain_last/3 Внешняя База Данных
- •Chain_next/3 Внешняя База Данных
- •Chain_prev/3 Внешняя База Данных
- •Chain_terms/5 Внешняя База Данных
- •Circle/3 Графика
- •Cleardevice/0 Графика
- •Clearviewport/0 Графика
- •Closegraph/0 Графика
- •Db_btrees/2 Внешняя База Данных
- •Db_chains/2 Внешняя База Данных
- •Db_close/1 Внешняя База Данных
- •Db_create/3 Внешняя База Данных
- •Db_delete/2 Внешняя База Данных
- •Db_flush/1 Внешняя База Данных
- •Db_garbagecollect/1 Внешняя База Данных
- •Db_open/3 Внешняя База Данных
- •Db_openinvalid/3 Внешняя База Данных
- •Db_statistics/5 Внешняя База Данных
- •Detectgraph/2 Графика
- •Drawpoly/1 Графика
- •Ellipse/6 Графика
- •Fillellipse/4 Графика
- •Fillpoly/1 Графика
- •Floodfill/3 Графика
- •Getarccoords/6 Графика
- •Getaspectratio/2 Графика
- •Getbkcolor/1 Графика
- •Getcolor/1 Графика
- •Getdefaultpalette/1 Графика
- •Getdrivername/1 Графика
- •Getfillpattern/1 Графика
- •Getfillsettings/2 Графика
- •Getgraphmode/1 Графика
- •Getimage/6 Графика
- •Getlinesettings/3 Графика
- •Getmaxcolor/1 Графика
- •Getmaxx/1 Графика
- •Getmaxy/1 Графика
- •Getmaxmode/1 Графика
- •Getmodename/2 Графика
- •Getmoderange/3 Графика
- •Getpalette/1 Графика
- •Getpalettesize/1 Графика
- •Getpixel/3 Графика
- •Gettextsettings/5 Графика
- •Getviewsettings/5 Графика
- •Getx/1 Графика
- •Gety/1 Графика
- •Graphdefaults/0 Графика
- •Graphresult/1 Графика
- •Imagesize/5 Графика
- •Initgraph/5 Графика
- •Key_current/4 Внешняя База Данных
- •Key_delete/4 Внешняя База Данных
- •Key_first/3 Внешняя База Данных
- •Key_insert/4 Внешняя База Данных
- •Key_last/3 Внешняя База Данных
- •Key_next/3 Внешняя База Данных
- •Key_prev/3 Внешняя База Данных
- •Key_search/4 Внешняя База Данных
- •Line/4 Графика
- •Linerel/2 Графика
- •Lineto/2 Графика
- •Moverel/2 Графика
- •Moveto/2 Графика
- •Outtext/1 Графика
- •Outtextxy/3 Графика
- •Pieslice/5 Графика
- •Pieslicexy/6 Графика
- •Putimage/4 Графика
- •Putpixel/3 Графика
- •Rectangle/4 Графика
- •Restorecrtmode/0 Графика
- •Setactivepage/1 Графика
- •Setallpalette/1 Графика
- •Setaspectratio/2 Графика
- •Setbkcolor/1 Графика
- •Setcolor/1 Графика
- •Setfillpattern/2 Графика
- •Setfillstyle/2 Графика
- •Setgraphmode/1 Графика
- •Setgraphbufsize/1 Графика
- •Setlinestyle/3 Графика
- •Setpalette/2 Графика
- •Setrgbcolor/4 Графика
- •Settextjustify/2 Графика
- •Settextstyle/3 Графика
- •Setusercharsize/4 Графика
- •Setviewport/5 Графика
- •Setvisualpage/1 Графика
- •Setwritemode/1 Графика
- •Term_delete/3 Внешняя База Данных
- •Term_replace/4 Внешняя База Данных
- •Textheight/2 Графика
- •Textwidth/2 Графика
- •Часть 3. Приложения приложение а. Введение вdos
- •Что такое dos
- •Как загрузить программу?
- •Каталоги
- •Подкаталоги
- •Avtoexec.Bat-файл
- •Команда path
- •Смена каталогов
- •Приложениеb. Интерактивный редактор турбо пролога
- •Быстрый вход, быстрый выход
- •Служебная строка окна редактора
- •Основные команды редактора
- •Команды Редактора, совпадающие с командами WordStar Основные команды работы с курсором
- •Команды быстрого движения курсора
- •Команды вставки и удаления
- •Команды работы с блоками
- •Остальные команды редактора
- •Старые команды
- •Поиск и замена
- •Редактор Турбо Пролога по сравнению с WordStar
- •Корректировка файла на диске.
- •Приложение c. Сообщения об ошибках
- •Приложение d. Различия между версиями 1.1 и 2.0
- •Файл определения проекта
- •Новые ограничения по именам
- •Новые предопределенные домены
- •Контроль состава параметров шаблона (flow pattern)
- •Поддержка старых командных клавиш редактора
- •Ошибочные ситуации в стандартных предикатах
- •Расширение Турбо Пролога 2.0
- •Системные расширения
- •Приложениеe. Словарь специальных терминов
- •Приложение f. Географическая база данных (Geobase)
- •Использование Geobase
- •Системы с 2-мя флоппи-дисковыми устройствами
- •Компиляция Geobase
- •Создание автономной программы
- •Главное меню Geobase
- •Справка
- •Команды dos
- •Редактор
- •Запросы к базе данных
- •Просмотр языка
- •Корректировка языка
- •Принципы Geobase
- •Использование принципа Geobase
- •Создание вашей базы данных
- •Преобразование Geobase
- •Предикат "ent"
- •Предикат "db"
- •Трансляция запросов на естественном языке
- •Внутренние имена объектов
- •Внутренние имена связей
- •Определение структуры предложений
- •База данных языка
- •Грамматический разбор с помощью разделения списков
- •Заключение
- •Приложение g. Анализатор предложений на турбо прологе
- •Использование анализатора предложений
- •Помощь пользователя
- •Операционная система
- •Редактирование базы данных
- •Загрузка базы данных из файла
- •Сохранение базы данных
- •Анализ предложений
- •«Показать/изменить словарь»
- •Приложениеh.Geni: оболочка экспертной системы
- •Использование geni
- •Запросы geni
- •Просмотр знаний
- •Корректировка базы знаний
- •Сохранение базы знаний
- •Создание новой базы знаний
- •Чистка текущей базы знаний
- •Проектирование новой базы знаний
- •Приложение I. Tlib: библиотека турбо
- •Компоненты командной строки tlib
- •Компонент «описание»
- •Список операций
- •Имена файла и модуля
- •Операции tlib
- •Создание библиотеки
- •Использование файла ответа
- •Расширенные возможности: опция /с
- •Примеры
- •Приложение j. Tlink: компоновщик турбо
- •Активизация tlink
- •Использование ответных файлов
- •Компоновка модулей Турбо Пролога и Турбо Си.
- •Модуль инициализации
- •Библиотеки
- •Опции tlink
- •Опция /c
- •Опция /d
- •Опция /I
- •Опция /l
- •Опции /m, /s, /X
- •Опция /m
- •Опция /s
- •Опция /X
- •Опция /n
- •Ограничения
- •Сообщения об ошибках
- •Предупреждения
- •Нефатальные ошибки
- •Фатальные ошибки
- •Приложение k. Метапрограммирование Введение
- •Пролог/Турбо: развитие и философские установки
- •Конструкторские решения в Турбо Прологе
- •Чем Турбо зарядило Турбо Пролог
- •Интерпретатор правил с обратной цепочкой рассуждений
- •Термы (горючее для интерпретатора правил)
- •Статические термы: область sTerm (статических термов)
- •Интерпретирование области термов.
- •Что такое интерпретатор?
- •Интерпретация правил в Прологе
- •Использование sTerm и aTerm для моделирования интерпретатора правил
- •Переменные и среда
- •Процесс унификации
- •Унификация статических и действительных термов
- •Интерпретация тела правила
- •Выполнение выполняемых термов: предикат call.
- •Встроенные предикаты
- •Сканнер и транслятор
- •Операторы традиционного Пролога
- •Использование операторов в Турбо Прологе
- •Интерпретатор Пролога
- •Реализация трассировки
- •Теперь объединим все вместе
- •Расширения экспертной системы
- •Цепочка с прямым порядком рассуждений
- •Стандартные предикаты, реализованные в pie
- •Заключение
Приложениеe. Словарь специальных терминов
Анонимная переменная - переменная "_", используемая вместо обычной
переменной в том случае, когда значение обычной переменной, с которой она
связана, не важно.
Аргументы - обобщенное название для имен переменных и объектов в от-
ношении.
Атом - отношение, содержащее, возможно, объекты или переменные.
Атрибут - целое положительное число, отражающее характеристики отоб-
ражения в данном окне, включая цвет, мигание (без мигания и нормальное),
инверсное изображение.
Поиск с возвратом - встроенный в Турбо Пролог механизм, обеспечиваю-
щий после завершения оценки заданной подцели возвращение Турбо Пролог к
предыдущей подцели с тем, чтобы попытаться согласовать ее другим путем.
Связанная переменная - переменная, имеющая ссылку к известной вели-
чине.
Вызов подцели (либо предиката) - выражение, означающее, что Турбо
Пролог в настоящее время пытается согласовать конкретную подцель (принад-
лежащую данному предикату).
Символ (char) - произвольный символ, заключенный в одинарные кавыч-
ки.
Директивы компилятора - инструкции для компилятора Турбо Пролог для
выполнения специальных действий.
Утверждение (предложение) - событие или правило для определения пре-
диката, сопровождающееся точкой (.).
Сложная цель - цель, состоящая не менее чем из двух подцелей.
Сложный объект - объект, состоящий из функтора и списка объектов,
разделенных запятыми и заключенными в скобки.
Текущее устройство ввода - установленное на настоящее время устройс-
тво ввода, из которого стандартные предикаты по умолчанию берут входные
данные.
Текущее устройство вывода - установленное на настоящее время устрой-
ство вывода, в которое стандартные предикаты по умолчанию посылают вход-
ные данные.
Отсечение (ИЛИ !) - отсечение позволяет Турбо Пролог использовать
все возможности выборов в оценке предиката, содержащего отсечение. Отсе-
чение может рассматриваться как подцель, которую Турбо Пролог не может
пройти при переборе с возвратами.
Предикаты базы данных - предикаты, для которых факты могут добав-
ляться, либо исключаться из системы Турбо Пролог во время исполнения.
Диалоговое окно - системное окно, в котором задаются внешние цели, а
также записываются результаты этих целей.
Домен - определяет типы значимых объектов, которые могут вступать в
отношение.
Окно редактирования - окно, в котором может редактироваться текст,
находящийся в рабочем файле.
Элемент списка - может быть как объектом. так и другим списком.
Экспертная система - компьютерная система, которая может давать экс-
пертную оценку в конкретной (очень узкой) области.
Внешняя цель - цель, которая вносится в диалоговое окно пользовате-
лем и задается для программы, находящейся в настоящее время в рабочем
файле.
Факт - отношение между объектами. Факт likes(john, mary) likes - яв-
ляется именем отношения, john и mary - объекты. Неуспех - подцель Турбо
Пролог не может быть согласована.
Поле - определенная последовательность отображаемых символьных пози-
ций, появляющихся в одной и той же строке на экране дисплея.
Имя файла - символьное имя файла, начинающееся с буквы нижнего ре-
гистра клавиатуры и появляющееся в правой части описания файлового доме-
на, либо одно из предварительно определенных символьных файловых имен
принтера, экрана, клавиатуры и устройства связи.
Шаблон на поток параметров - шаблон, формирующийся в зависимости от
того используются ли параметры в предикатном вызове для ввода данных
(т.е. данные известны), либо для вывода данных (т.е. данные неизвестны).
Поточный вариант - если предикат ассоциируется с несколькими различ-
ными шаблонами, то для каждого шаблона будет реализована самостоятельная
внутренняя программа, относящаяся к данному предикату. Эти различные дей-
ствия получили название поточных вариантов предиката.
Свободная переменная - переменная, не связанная в настоящее время ни
с одним значением.
Функтор - имя для сложного объекта.
Глобальный - спецификатор, используемый для разрешения доступа более
чем одной программе к конкретным доменам и предикатам.
Цель - набор подцелей, которые должен согласовать Турбо Пролог.
Дерево целей - диаграммное представление возможных альтернатив, ко-
торые могут быть выполнены при оценке подцелей, входящих в состав цели.
Ручная трассировка - трассировка, выполняемая программистом с по-
мощью ручки и бумаги, а не компьютера.
Заголовок списка - первый элемент списка.
Динамическая часть памяти - часть памяти, используемая Турбо Пролог
для построения структур, хранения строк и вставки фактов для предикатов
базы данных.
Инфиксная запись - запись арифметического выражения с операторами
между двумя значениями или выражениями, по которым они должны действо-
вать.
Целое число - целое число в диапазоне от -32.768 до 32.767.
Внутренняя цель - цель, содержащаяся в секции целей программы.
Итеративный метод - метод, представляющий собой повторение одних и
тех же основных действий до тех пор пока цель не будет согласована.
Список - специальный вид объекта, содержащий набор элементов, заклю-
ченных в квадратные скобки и отделенных запятыми. Модуль - программа Тур-
бо Пролог с глобальными описаниями, формирующими часть проекта.
Множественные описания предиката - отдельно взятый предикат может
иметь несколько описаний, каждое из которых содержит различные доменовые
спецификации для аргумента (аргументов) релевантного отношения.
Имя - любая жесткая последовательность букв, цифр и символов подчер-
кивания, которая начинается с буквы нижнего регистра клавиатуры, либо
символа подчеркивания.
Объект - имя отдельного элемента конкретного типа.
Приоритет оператора - иерархия, определяющая порядок, в котором вы-
полняются операторы в арифметических выражениях. Параметр - общее имя для
имен объектов и переменной в отношении.
Указатель - механизм, с помощью которого Турбо Пролог сохраняет за-
пись следующего места в своей базе данных событий или правил, к которой
он обращается при переборе с возвратом.
Предикат - каждое событие или правило Турбо Пролога входит в состав
какого-либо предиката, определяемого именем включаемого отношения и имен
объектов, включенных в отношение.
Проект - программа Турбо Пролог, содержащая один или более модулей.
Действительное число (real) - десятичное число в диапазоне от
+/-1.0Е до +/-1.0Е+308.
Рекурсия - способ, при котором объект определяется в собственных
терминах.
Ссылочные объекты и домены - если несвязанная переменная проходит из
одной подцели в другую, то домен, содержащий значение, с которым перемен-
ная в конечном счете будет связана, должен быть объявлен ссылочным доме-
ном. Элементами подобного домена являются объекты ссылок.
Комбинация повтор...отказ - Прием, который может быть использован
для отказа от конца рекурсии вместо механизма поиска с возвратом Турбо
Пролог.
Отношение - способ, при котором подобранные объекты (либо выполнение
ссылок и переменных на объекты) соответствовали бы друг другу.
Правило - связь между "событием" и списком подцелей, которые должны
быть согласованы для того, чтобы "событие" было исполнено. Согласование
подцелей - процесс, при котором Турбо Пролог выбирает значения для любых
несвязанных переменных (если это возможно) таким образом, чтобы подцель
являлась истинной в соответствии с заданными утверждениями для передающе-
го предиката.
Принцип поиска - одно из четырех основных правил, которые должен
соблюдать Турбо Пролог с тем, чтобы согласовать цель.
Стек - часть памяти, используемой Турбо Пролог для передачи парамет-
ров.
Автономные программы - программы, которые должны быть запущены из
ДОС независимо от Турбо Пролог.
Стандартный предикат - предикат, уже определенный внутри Турбо Про-
лога.
Стандартный тип (домена) - домен, содержащий объекты одного из ти-
пов: целое число, действительное число, символ, строка или файл.
Строка - произвольная строка символов, заключенных в двойные кавыч-
ки.
Подцель - отношение, возможно включающее объекты или переменные, ко-
торое должен согласовать Турбо Пролог.
Подобъект - один из объектов в сложном объекте.
Имя - некоторая последовательность букв, цифр и символов подчеркива-
ния и начинающаяся с буквы нижнего регистра или символа подчеркивания.
Конец списка - список, который сохраняется при удалении первого эле-
мента данного списка (вместе с его разделителем - запятой).
Ограничение конца рекурсии - действие, выполняемое внутри Турбо Про-
лог для ограничения рекурсии по времени и месту в правилах.
Терм - любой объект одного из доменов стандартного типа, список, пе-
ременная, либо сложный терм, т.е. функтор, сопровождающийся списком тер-
мов, заключенные в круглые скобки и разделенные запятыми.
Лексема - имя, действительное или целое число, либо непустой символ.
Трассировка - осуществление пошагового отчета о выполнении програм-
мы, показывающее все происходящие изменения.
Окно трассировки - окно, в котором Турбо Пролог может генерировать
трассировку выполнения программы.
Хвост (trail) - часть памяти, используемая Турбо Пролог для регист-
рации связанных и несвязанных ссылочных переменных.
Система типов - средство, с помощью которого все объекты в отношении
или все переменные, используемые как аргументы в отношении, ограничивают-
ся принадлежностью к конкретным доменам, которые используются в описании
соответствующего предиката.
Унификация - процесс, при котором Турбо Пролог пытается сопоставить
подцели с событиями и левой частью правил, либо для согласования цели,
либо для определения одной или более подцелей, необходимых для оценки
первоначальных целей.
Переменная - имя, начинающееся с заглавной буквы для представления
(возможно неизвестного) значения конкретного объекта.
Связывание переменных - состояние (свободное или связанное) одной
или более переменных.