logo search
Моделирование систем / Моделирование систем / Теория / Dop / АИС_Конспект

3.4.1. Основы создания информационных систем в Visual Prolog

Известно несколько версий реализации данного языка ПРОЛОГ на персональных ЭВМ. Наиболее удачными реализациями компилятора являются следующие две версии Turbo Prolog фирмы Borland Inc и Visual Prolog (VIP) фирмы PDC. Последняя версия реализуют графический интерфейс пользователя и предназначена для работы в современных операционных системах, таких как Windows 2000/XP. В пособие рассматривается версия Visual Prolog 5.2.

При разработке программы в VIP В разделе предикатов приводится описание всех предикатов создаваемой программы. предикаты в общем виде задаются как:

p(arg1 [rem1],arg2 [rem2],…)

Здесь:

p – наименование предиката;

arg – наименование аргумента предиката ;

rem – строка символов, комментарий предиката, может отсутствовать.

Аргумент предиката – условное обозначение домена, из которого может принимать значение переменная или константа предметной области программы. Допускается указывать напрямую имена доменов, в этом случае раздел доменов в программе может отсутствовать. Допускается так же наличие предикатов, не содержащих аргументов. Обычно такие предикаты используются для программирования правил.

Формализованное описание предметной области программы приводится в разделе фактов. Раздел содержит факты и правила, формирующие базу знаний системы. Факты и правила заканчиваются символом «.».

В целевом разделе программы записывается целевой предикат, который должен быть обработан процессором логического вывода системы программирования VIP. Цель может состоять из отдельных подцелей объединенных логическими связками «И» – «,» , либо «ИЛИ» – «;».

Программа – проект. Наиболее простой вариант проекта – проект для работы с утилитой TestGoal, которая является подсистемой среды разработки. Процесс разработки такой программы приводится в приложении № 2, базовые сведения по языку программирования VIP приводятся в приложении № 1.

Пример программы. Составить программу для поиска фирмы и количества поставленного товара по запросу пользователя.

domains

firma=string

kol_vo=integer

predicates

postavleno(firma,kol_vo)

poisk

clauses

%факты поставки товара

postavleno("АО ИСТРА",10).

postavleno("АО ВОСТОК",20).

postavleno("АО ИВОЛГА",100).

%Правило поиска фирмы

poisk:-

write("Введите фирму "),readln(Firma),

postavleno(Firma,Kol),

writef("\n%-20\t%-20",Firma,Kol),nl.

goal

poisk.

Рис.3.3. Вывод программы.

Вывод программы показан на рисунке 3.3. Раздел предикатов можно упростить, тогда раздел доменов программы нужно убрать:

predicates

postavleno(string firma,integer kol_vo)

При обработке целевого утверждения раздела goal процессор логического вывода стремится найти решение, которое ему соответствует.

При этом нужно учитывать ряд особенностей описания предметной области и процесса поиска решения.

Создание описания предметной области в разделе clauses строится на основе предикатов, которые могут как детерминированными, так и не детерминированными. Предикаты первого типа позволяют получить только одно решение, предикаты второго типа позволяют получать множество решений. Обычно программы – информационные системы содержат предикаты второго типа, что задается в настройках компилятора параметр Default Predicate Type (см приложение).

Набор фактов для конкретного предиката образует процедуру.

Пример. Рассмотрим программу для вывода информации о руководителях отделов.

predicates

rukovodit(string f_i_o,string otdel)

vyvod

clauses

%Процедура предиката

rukovodit("Иванов И.С", "склад").

rukovodit("Петров О.И ", "сбыт").

rukovodit(Lico, "маркетинг"):-

rukovodit(Lico, "сбыт").

%Конец процедуры

vyvod:-

rukovodit(Rukov,Otdel),write(Rukov,"\t",Otdel),nl.

goal

vyvod.

Предметная область содержит предикат rukovodit, который является не детерминированным. При использовании правила вывода vyvod будет получено только одно решение см. рисунок 3.4.

Рис.3.4. Обработка правила вывода.