
Оглавление:
Задание......................................................................................... стр. 2
Создание проекта на VisualProlog5.1 ........................................стр.2
Структура программы...................................................................стр.4
Листинг программы на VisualProlog5.1.....................................стр.8
Создание проекта на VisualProlog7.3.........................................стр.9
Структура программы...................................................................стр.11
Различия кода на VP5.1 иVP7.3...................................................стр.12
Листинг программы на VisualProlog7.3 ................................... .стр.14
Валухов И.А., А-99
Задание:
Разработать консольные программы для visual prolog 5.1 и visual prolog 7.3, сравнить структуру программ и порядок создания проекта в обеих средах разработки.
Для примера, возьмем следующее задание:
Создать ИСС, позволяющую выбрать заболевания по набору 2 симптомов. Атрибуты: температура, боль в горле, повышенное давление, учащенный пульс и т.п.
Создание проекта на Visual Prolog 5.1(vp):
После запуска системы создаем консольный проект: открываем Project/NewProjectи в утилитеApplicationExpertустанавливаем имя проекта и папку (рис.1). Здесь же на страницеTargetв строкеUIStrategyвыбираем режимTextmode(рис. 2.1 и рис.2.2). Остальные опции можно не менять.
Рис.1
Рис.2.1
Рис.2.2
Нажимая Edit, открываем файл и набираем Пролог-программу (рис.3). (Можно копировать файлы изWord. Если в импортируемом файле есть кириллица и она не выводится на экран, то попробуйте подобрать шрифт(иконкаF), например,MSSansSerif.
Структура программы
Коротко о структуре Пролог-программы, приведенной на рис.3. Она состоит из 4-разделов: domains,predicates,clausesиgoal. В сlausesзаписываются факты (утверждения), принимаемые в программе за аксиомы, и правила, которые используют эти аксиомы для вывода заключений. Здесь 5 фактов с названием «болезнь», в каждом из которых 5 аргументов- константы, и два правила с одним и тем же именемstart. В первое входят предикат «болезнь», аргументы которого не константы, а переменные (первая буква – заглавная), и системные предикатыwrie,readintи т.п., соединенные символом «,». Последний является аналогом конъюнкции. Во втором правилеstartсодержится предикатwriteи предикаты перехода на новую строку –nl. Предикаты, входящие в тело правила, называются подцелями, а имя правила – целью. Цель заносится в разделgoal. Пролог-система доказывает истинность цели, для чего пытается доказать истинность каждой подцели при одних и тех же значениях переменных в теле правила. Для поиска доказательства система в общем случае делает полный перебор фактов. В нашем случае имеется 2 варианта решения в соответствии с двумя правиламиstart:
- система пытается доказать, что существует болезнь, давление и температура которой удовлетворяет запросу пользователя (ввод с клавиатуры); после достижения цели выводятся симптомы найденной болезни;
- если первый вариант правила не доказывается, то система переходит к доказательству второго варианта, которое сводится к выводу сообщения “Такой болезни еще нет”. В том или другом случае цель достигается, поэтому заключительное сообщение системы в обоих случаях yes. (Если убрать второй вариантstart, то при не доказательстве цели выводится сообщениеno)
В разделе predicatesобъявляются прототипы фактов и названия правил, а в разделеdomainsописываются типы аргументов предикатов
Рис.3
После занесения текста программу целесообразно проверить.
Для этого нажимаем иконку Gили пункт менюProject/TestGoal. Программа компилируется, связывается и выполняется, при этом выполнимый файл не заносится на диск. Как обычно, компилятор выдает предупреждения (Warnings) и ошибки (Errors) (рис.4).
Рис.4
Предупреждения сообщают, что предикаты болезнь и startявляются недетерминированными предикатами. Это значит, что они могут в процессе поиска решения пересогласовываться, т.е. выполняться несколько раз с различным набором значений переменных. Все пользовательские предикаты недетерминированные, а системные – детерминированные (write,readи др.) Можно не обращать внимания на это предупреждение, а можно предварять эти предикаты словомnondetermв разделеpredicates.
nondetermболезнь(название, температура, боль_в_горле, давление, пульс)
nondetermstart
Теперь проверим работу программы в зависимости от введенных критериев:
После тестирования программы можно запустить режим Project/Run; в результате выполнимый файл будет зафиксирован на диске. Используя этот файл можно заниматься отладкой программы, для чего следует подключить отладчик (Project/Debug). (В режимеTestGoalон не работает). Нажимая иконкуTraceintoилиStepoverможно проследить процесс доказательства по шагам. Для того, чтобы можно было прочитать информацию во время отладки, вся программа должна быть записана на латинице. Кроме того, каждый предикат желательно записывать на отдельной строке.
Необязательно импортировать программу в проект. Можно к проекту подключать файл с программой, для чего вместо программы записать строку подключения текстового файла с вашей программой.
include "lab1.pro"