
ФиЛП_материалы / Материалы / Prolog / КонсольVisualProlog5
.docВ Visual Prolog 5.1(VP) имеется возможность работать в 2-х режимах – с отдельным файлом и с проектом.
Рассмотрим первый. После запуска системы открываем File/New и набираем Пролог программу (рис.1). (Можно копировать файлы из Word. Если в импортируемом файле есть кириллица и она не выводится на экран, то попробуйте подобрать шрифт(иконка F), например, MS Sans Serif.
Коротко о структуре Пролог-программы, приведенной на рис.1 (см. также лаб.работу №4). Она состоит из 4-разделов: domains, predicates, clauses и goal. В сlauses записываются факты(утверждения), принимаемые в программе за аксиомы, и правила, которые используют эти аксиомы для вывода заключений. Здесь 5 фактов с названием «автомобиль», в каждом из которых 4 аргумента- константы, и два правила с одним и тем же именем start. В первое входят предикат «автомобиль», аргументы которого не константы, а переменные (первая буква – заглавная), и системные предикаты wrie, readint и т.п., соединенные символом «,». Последний является аналогом конъюнкции. Во втором правиле start содержится предикат write и предикаты перехода на новую строку – nl.Предикаты, входящие в тело правила, называются подцелями, а имя правила – целью. Цель заносится в раздел goal. Пролог-система доказывает истинность цели, для чего пытается доказать истинность каждой подцели при одних и тех же значениях переменных в теле правила. Для поиска доказательства система в общем случае делает полный перебор фактов. В нашем случае имеется 2 варианта решения в соответствии с двумя правилами start:
- система пытается доказать, что существует автомобиль, цена которого меньше задаваемой с клавиатуры, а год выпуска больше задаваемого; после достижения цели выводятся параметры найденного автомобиля;
- если первый вариант правила не доказывается, то система переходит к доказательству второго варианта, которое сводится к выводу сообщения “Автомобиля с такими параметрами нет”. В том или другом случае цель достигается, поэтому заключительное сообщение системы в обоих случаях yes. (Если убрать второй вариант start, то при недоказательстве цели выводится сообщение no)
В разделе predicates объявляются прототипы фактов и названия правил, а в разделе domains описываются типы аргументов предикатов.
Рис.1
После занесения текста файл по нажатию иконки G или пункта меню Project/Test Goal компилируется, связывается и выполняется, при этом выполнимый файл не заносится на диск. Как обычно, компилятор выдает предупреждения (Warnings) и ошибки (Errors). (рис.2 и 3.).
Рис.2
Рис.3
Ошибка заключается в том, что в 3-м факте сверху в качестве второго аргумента поставлено число, тогда как согласно объявлению предиката в разделе predicates должен стоять символ.
Предупреждения сообщают, что предикаты автомобиль и start являются недетерминистскими предикатами. Это значит, что они могут в процессе поиска решения пересогласовываться, т.е. выполняться несколько раз с различным набором значений переменных. Все пользовательские предикаты недетерминистские. Можно не обращать внимания на это предупреждение, а можно предварять эти предикаты словом nondeterm в разделе predicates.
nondeterm автомобиль (модель, цвет, цена, год_выпуска)
nondeterm start
(Обратите внимание, что система не может вывести имя предиката на русском языке(рис.3). Могут появиться некоторые другие проблемы, связанные с наличием в программе кириллицы. Поэтому, вообще говоря, в серьезных программах лучше использовать латиницу, во всяком случае для имен предикатов и переменных. В лабораторных пишите, как удобнее.)
После исправления ошибки и запуска программы получаем в зависимости от введенных критериев одно (рис.4) или другое (рис.5) решение.
Рис.4
Рис. 5.
Теперь называем файл, например, lab1.pro и сохраняем его (можно было сделать это и раньше).
Способ решения с организацией проекта более сложен и не особенно нужен для выполнения лабораторных работ. Желающие могут прочитать о нем в [Адаменко,Кучуков ] или в документации системы (на английском), которая записывается на диск при установке системы (раздел DOC).