Определение отношений в программе
1.5. Основные разделы программы
В языке Visual Prolog используются следующие разделы программы [15]:
- (class) facts — объявление предикатов, описывающих факты (а также внутренних баз данных и фактов-переменных — см. гл. 4);
- (class) predicates — объявление предикатов;
- domains — объявление доменов (типов данных);
- constants — объявление констант;
- clauses — раздел предложений, которые определяют предикаты;
- goal — раздел, в котором определяется цель программы.
Раздел goal может быть только один в проекте, он располагается в файле main.pro.
Другие разделы программы связаны со структурой классов:
- class <имя класса> … end class <имя класса> — декларация класса;
- class <имя класса > : <имя интерфейса> … end class <имя класса> — декларация класса, порождающего объекты;
- interface <имя интерфейса> … end interface < имя интерфейса > — интерфейс;
- implement <имя класса > … end implement <имя класса > — имплементация класса;
- open — имена "открытых" классов и интерфейсов;
- properties — объявление свойств;
- constructors — объявление конструкторов (в декларациях классов).
Кроме этого, имеются разделы supports, resolve, inherits, delegates, predicates from и другие.
1.6. Создание модулей
В дальнейшем рекомендуется для каждой главы создавать отдельный консольный проект, а для каждого примера — отдельный модуль (рис. 1.5).
Для того чтобы создать модуль, следует выделить корень дерева проекта и выбрать команду (всплывающего) меню New In New Package. В открывшемся диалоговом окне Create Project Item необходимо выбрать в левом поле раздел Class (см. рис. 1.4), убрать флажок из поля Create Interface, ввести в поле Name имя модуля (ex1) и нажать на кнопку Create. В декларации класса (файл ex1.cl) нужно объявить предикат run, с помощью которого будет указываться цель:
predicates run: ().
Раздел open имплементации класса (файл ex1.pro) должен иметь вид:
open core, console
Раздел goal проекта (файл main.pro) нужно изменить следующим образом:
goal mainExe::run(main::run), ex1::run().
Для построения и компиляции пакета используются команды Build и Compile.
Перед именем предиката (домена, функтора, свойства или константы) объявленного в декларации класса, вне имплементации этого класса указывается имя этого класса: пишется имя класса, ставится двойное двоеточие, а затем вводится имя предиката. Для запуска программы используются команды меню Build > Run in Window или Build > Execute (или кнопка E панели инструментов).
Замечание. Если используется незарегистирированная версия Personal Edition, то при выполнении любой команды меню Build появляется окно, предлагающее активировать код лицензии. Для продолжения — выполнения команды — достаточно нажать кнопку Cancel. Код лицензии выдается при регистрации системы. Регистрация бесплатна. После активации кода указанное окно больше не появляется. Остается окно с предупреждением о возможности использования ознакомительной версии только некоммерческим образом.
Упражнения
-
Определите в программе о родственных отношениях следующие бинарные отношения:
- внук, внучка, дедушка и бабушка;
- ребенок как обратное к отношению родитель;
- сын, дочь, сестра и брат;
- супруги как симметричное замыкание отношения супруг.
-
Напишите программу, которая с помощью бинарных отношений владелец, животное и цвет, хранящих пары хозяин – кличка, кличка – животное и кличка – окрас, соответственно, описывает следующие сведения. Майкл владеет рыжим котом, Сьюзен шоколадным, Дэн и Пит владеют серыми котами. Билл имеет собаку серого окраса, а Бетти шоколадного. Все животные имеют уникальные клички (придумайте их самостоятельно). Составьте запросы к программе:
- найти владельцев серых котов;
- найти животного Билла и цвет этого животного;
- найти животных, которыми владеют Бетти и Майкл;
- найти владельцев животных шоколадного окраса.
-
Найдите декларативное значение программы "Птицы" (листинг 1.1).
-
Постройте для логической программы
add(o, X, X). add(s(X), Y, s(Z)):- add(X, Y, Z).
- эрбранов универсум;
- эрбранов базис;
- минимальную модель.