В окно "Трассировка" выводится протокол работы программы, то каждый вызов предиката, базы данных или арифметического выражения, а также возвращаемые ими значения.
Рис. 3.7. Вид окна трассировки.
В окне "Стек" можно просмотреть стек программы. Стек представлен в виде древовидной структуры. В корне дерева находятся вызовы предикатов. Развернув корневой элемент дерева можно увидеть параметры, с которыми был вызван предикат и переменные, которые были созданы в процессе выполнения предиката.
Общий вид корневого элемента дерева выглядит следующим образом: "Имя предиката n1 : n2", где n1 - номер предложения, n2 - номер условия в предложении.
Рис.3.8. Вид окна стека.
Для удобства пользователя при выборе команд в программу введена система меню, которая содержит следующие пункты:
Файл
Окна
Проект
Настройка
Помощь
Меню Файл содержит следующие пункты.
Создать - позволяет создать новую программу на Прологе.
Открыть - позволяет открыть имеющийся файл и выводит стандартное окно Windows для открытия файла:
Рис.3.9. Вид окна для открытия файла.
При открытии файла в инспектор загружается информация о типах, базах данных и предикатах, а в редактор - текст программы. Если формат файла был нарушен, то он не будет загружен.
Вспомнить - за этим пунктом скрывается подменю, состоящее из имен последних восьми файлов, которые открывались Пролог-системой. Нажав на название нужного файла в этом подменю можно быстро загрузить его.
Сохранить - позволяет сохранить файл на диск. Если файл создавался с помощью пункта меню Создать, то выводится диалоговое окно, позволяющее присвоить имя сохраняемому файлу.
Сохранить как - позволяет присвоить новое имя файлу. При выборе этого пункта меню будет выведено на экран диалоговое окно для ввода имени файла.
Печать - формирует печатную форму из данных, содержащихся в инспекторе, окне редактора и окне опций проекта. После окончания процесса формирования печатной формы на экране появится окно, в котором можно будет просмотреть вид печатной формы. В этом окне можно выделить область текста и скопировать в буфер обмена. При нажатии в окне печати на кнопку "Печать" будет начат вывод на принтер. Общий вид печатной формы можно представить следующим образом:
<Имя печатаемого файла>
DOMAINS
<Объявления типов>
ALIAS
<Имя алиаса в Borland Database Engine, которое использует данная программа>
DATABASES
<Описание структур баз данных>
PREDICATES
<Описание параметров предикатов>
GOAL
<Имя запускаемого предиката>
CLAUSES
<Текст программы>
Выход - позволяет завершить работу программы интерпретатора Пролог.
Меню Окна позволяет открыть следующие окна:
Инспектор;
Консоль;
Редактор;
Контрольные точки;
Стек;
Трассировка.
Меню Проект содержит следующие пункты:
Опции - выводит на экран диалоговое окна с опциями проекта, в котором можно указать имя алиаса, которым будет пользоваться программа написанная на Прологе, а также имя запускаемого предиката.
Запуск - позволяет запустить Пролог-программу на исполнение.
Меню Настройка содержит пункт Параметры редактора. При выборе этого пункта появляется диалоговое окно, в котором можно выбрать тип и размер шрифта для окна редактора.
Меню Помощь содержит следующие пункты:
Предметный указатель - загружает help-файл и показывает главную страницу.
О программе - выводит окно с информацией о программе.
Выполнение программы, написанной на языке Пролог, ведется с использованием алгоритма бэктрекинга.
Предложение просматривает все свои условия последовательно и пытается найти решение для каждого из них. Найдя решение для первого условия, интерпретатор переходит к поиску решения для второго условия с учетом значений переменных, которые были изменены первыми условием. Если решение было найдено, то программа переходит к следующему условию. В противном случае интерпретатор должен вернуться к предыдущему условию и попытаться найти для него другое решение отличное от ранее найденного, а затем опять попытаться выполнить второе условие. Перед началом обратного пути уничтожаются все переменные, которые были созданы перед этим шагом и очищаются те переменные, которые были свободны. Такой процесс происходит до тех пор, пока не будет найдено общее решение верное для всех условий предложения. В этом случае предложение объявляется истинным и выполнение его прекращается. Если такого общего решения найдено не было, то предложение объявляется ложным.
Арифметические выражения и стандартные предикаты процесс бэктрекинга игнорируют и выполняются, так как выполняются однозначно.
3.5 Общие сведенья об интерпретаторе
Данная версия языка Пролог совместима по синтаксису с языком Turbo Prolog с некоторыми отличиями.
Поддерживаются следующие простые типы данных:
Integer - целочисленный тип;
Real - число с плавающей запятой;
String - строка;
Boolean - логический тип (имеет два значение True - истина и False - ложь).
Составные типы:
Список - используется для представления массивов данных. Количество элементов в списке не ограничено.
Структура - используется для представления массивов неоднородных данных. Количество полей в структуре не ограничено.
Составной тип - используется для совмещения нескольких типов под одним именем.
Комментарии внутри программы записываются внутри фигурных скобок.
Данная версия Пролога работает со следующими видами баз данных:
Paradox 7 (или предыдущие версии);
DBase IV и DBase for Windows;
Fox Pro;
MS Access.
Для использования других видов баз данных (например, InterBase или Oracle) необходима установка драйверов этих баз данных.
Работа с базами данных производится под управлением Borland Database Engine, которая должны быть установлена на компьютер либо при установке Пролога, либо с какой-либо другой программой.
При выполнении программы база данных идентифицируется с помощью своего псевдонима, которое при вводе структуры базы данных средствами инспектора заносится в поле "Имя". Имя файла базы данных в тексте программы не используется, хотя псевдоним и имя файла могут совпадать.
Обращение к базе данных происходит так же, как к обычным предикатам, состоящим только из предложений-фактов.
При запуске Пролог-программы интерпретатор определяет, существует ли файл базы данных на диске. Если файл базы данных существует, то он открывается и проверяется соответствие структуры файла базы данных и описания этой базы данных в программе. При описании базы данных в программе некоторые поля можно не использовать. Если файл базы данных отсутствует на диске, то он создается по описанию структуры. При завершении выполнения Пролог-программы все базы данных автоматически закрываются.
Все стандартные предикаты выполняются только прямом пути алгоритма бэктрекинга. На обратном пути они ничего не делают.
Предикаты ввода с консоли.
ReadString(<свободная переменная>) - читает с консоли строку. В качестве параметра обязательно должна передаваться свободная переменная. В противном случае будет выдано сообщение об ошибке и программа закончит свою работу.
ReadInteger(<свободная переменная>) - читает с консоли целое число.
ReadReal(<свободная переменная>) - читает с консоли реальное число.
Предикаты вывода на консоль.
Write (<переменная или константа любого типа>, ...) - печать на консоль содержание переменной. Количество аргументов у предиката произвольно. Количество аргументов у предиката произвольно. Стиль вывода на печать устанавливается в опциях проекта. Например, в процессе отладки можно включить печать имен переменных вместе с их содержимым или кавычки у строковых переменных.
WriteLn (<переменная или константа любого типа>, ...) - печать на консоль содержание переменной или константы и перевод курсора на следующую строку. Количество аргументов у предиката произвольно.
Nl - перевод курсора консоли на следующую строку.
Предикаты определения типов переменных.
IsInteger(<переменная>) - предикат является истинным, если поступающая на вход переменная - целочисленная.
IsReal(<переменная>) - проверяет, является ли переменная реальным числом.
IsNumeric(<переменная>) - проверяет, является ли переменная числовой, то есть либо реальной, либо целой. Использование функции IsNumeric предпочтительнее, чем IsInteger и IsReal, так как в ходе некоторых арифметических операций над целыми числами результат получается дробным (например, при делении).
IsString(<переменная>) - проверяет, является ли переменная строкой.
IsBoolean(<переменная>) - проверяет, является ли переменная логической.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15