3.4.6. Особенности работы с базой фактов
При работе с предметной областью можно сохранить результаты ее обработки в текстовом файле, использовать динамическую базу данных фактов и использовать внешние базы данных.
В VIP используется потоковая технология ввода – вывода информации. Для вывода информации в текстовый файл служит специальный системный домен file . В программу нужно ввести файловый домен в виде:
file=file_domen
Если требуется выполнить вывод содержания предметной области в файл, то для этого нужно создать специальный файловый поток. Файловый поток содается с помощью предикатов:
openwrite(file_domen,”имя файла на диске”)
writedevice(file_domen)
Первый предикат выполняет связывания файлового потока с физическим файлом на диске, а второй предикат инициализирует поток вывода.
После завершения вывода поток должен быть закрыт, переадресован на консоль. Для этого используется системный предикат
closefile(file_domen)
Восстановление вывода на консоль выполняется предикатом writedevice, в качестве аргумента следует указать системное имя консоли screen.
Вывод строк текстового файла на экран производится с помощью системных предикатов:
openread(file_domen,”имя файла”)
readdevice(file_domen)
eof(file_domen)
Первый предикат создает входной поток данных, связанный с физическим файлом на диске, второй предикат активизирует поток ввода, третий используется при чтении строк файла для фиксации служебного кода EOF – конец файла.
После завершения чтения строк файла нужно файловый поток ввода закрыть, и переадресовать ввод на консоль.
Пример программы записи фактов предметной области в текстовый файл с последующим контрольным выводом содержимого файла на экран.
domains
id,name = symbol
zip = integer
file = outfile
predicates
employee(id,name,zip)
prnlst
getlst
clauses
%факты предметной области
employee("100","Иванова",12).
employee("200","Петров",15).
employee("300","Антонова",12).
%запись фактов на диск
prnlst:- %запись в файл
openwrite(outfile,"employ.lst"),
writedevice(outfile),
employee(Id,N,Z),write(Id," ",N," ",Z),nl,fail.
prnlst:- %закрыть в файл
writedevice(screen),
closefile(outfile),
write("Done !"),nl,readchar(_).
getlst:- %читать строки
readdevice(outfile),not(eof(outfile)),
readln(Bufer),write(Bufer),nl,
getlst.
getlst:- %закрыть файл
writedevice(screen),closefile(outfile),
readchar(_).
goal %печать и открытие файла
prnlst,openread(outfile,"employ.lst"),getlst.
Описание предметной области, построенное в разделе clauses программы – статическое. Для получения динамического описания нужно использовать базу данных фактов. Такая база данных – модель предметной области, размещенная в оперативной памяти ЭВМ. В оперативной памяти можно разместить только факты. После помещения фактов в оперативную память предметную область можно изменять: добавлять и удалять факты. Контроль за наличие в оперативной памяти повторяющихся фактов возлагается на разработчика программы.
Для создания такой базы фактов нужно в программу поместить раздел facts – name. Здесь name – необязательный параметр для присвоения имени динамической базе фактов. По умолчанию используется база фактов с именем dbasedom.
Обслуживание динамических фактов выполняется системными предикатами:
asserta(fact) – добавление факта перед имеющимся;
asserta(fact,name) – добавление факта перед имеющимся;
assertz(fact) – добавление факта после последнего;
assertz(fact,name) – добавление факта после последнего;
retract(fact) – удаление факта по образцу;
retract(fact,name) – удаление факта по образцу;
retractall(fact) – удаление всех фактов по образцу;
retractall(fact,name) – удаление всех фактов по образцу.
При работе с динамической базой данных фактов удаление фактов выполняется по определенному шаблону, ненужные данные в шаблоне помечаются специальным символом «_».
Примеры. В предметной области хранится информация об отделах и служащих. Для этого используется два предиката:
otdel(integer kodotdela,string nazvotdela,
integer kodrukov)
sotrudniki(integer kodsotr,string familya,
integer kodotdela)
Факты размещаются в двух динамических базах. Для хранения информации об отделах используется база по умолчанию, а для хранения информации о сотрудниках служит база фактов fsotrudniki.
Примеры использования предикатов:
%Добавление факта:
assertz(otdel(10,“Бухгалтерия”,100)).
%удаление сотрудника:
retract(sotrudniki(_,”Иванова О.И.”,_),fsotrudniki).
%удаление сотрудников отдела с кодом 10
retractall(sotrudniki(_,_,10),fsotrudniki).
%удаление всех фактов из БД сотрудники:
retractall(_,fsotrudniki).
Предикат retract может использоваться с переменными, в этом случае перед удалением происходит связывание соответствующей переменной со значением из предметной области:
pr:-
retract(sotrudniki(Kod,Fam,KodOtd),fsotrudniki),
write(Kod,”\t”,Fam,”\t”,KodOtd),nl,fail.
Запись содержимого предметной области в текстовый файл выполняется предикатом save, а чтение данных в базу из ранее созданного факта предикатом consult.
Пример.
dbsave:-
save("C:\\temp\\persons.dat").
dbconsult:-
consult("C:\\temp\\persons.dat").
Для записи именованного набора фактов, вторым аргументом нужно указать имя набора.
Дополнительные возможности по созданию динамического описания предметной области предоставляют внешние базы данных. Они позволяют хранить факты и обрабатывать их в оперативной памяти, либо в дисковых файлах. Факт в динамической базе данных можно заменить на новый.
Информация во внешней базе данных хранится в виде цепочки (chain). Цепочка это последовательность термов – фактов связанных между собой адресом, который хранится в адресном поле терма. Адрес формируется системно в процессе помещения факта в цепочку. Термы цепочки хранят информацию, которая обладает одинаковой структурой, но разным содержанием.
Например, цепочка, в которой хранится информация о товарах, будет представлена последовательностью термов со структурой:
Tovar(integer Kod,string Naimenovanie,integer KodPostavshika)
Для работы с внешней базой данных нужно объявить в разделе доменов селектор. Селектор – указатель на внешнюю базу данных. Если в программе несколько баз данных селекторы задают с помощью альтернативного домена. Общий формат задания селекторного домена имеет вид:
db_selector=s1;s2;…si
db_selector – домен селекторов Visual Prolog.
Пример:
domains
db_selector=dbp
Работа с базами данных требует использования определенных системных предикатов.
Создание базы данных выполняется предикатом db_create(Dbase,Name,Place)
Где: Name – имя базы данных, либо имя файла.
Place — размещение базы данных: in_memory (оперативная память), in_file(дисковый файл).
Пример создания базы в оперативной памяти:
db_create(dbp,"persons_list",in_memory).
Закрытие базы данных и ее удаление выполняется с помощью предикатов:
db_close(Dbase)
db_delete(Name,Place).
Пример:
db_close(dbp),
db_delete("persons_list",in_memory).
Если база данных находилась в дисковом файле, удаление базы приводит к уничтожению файла.
Работа с цепочками термов выполняется путем обращения к следующим предикатам:
chain_inserta(Dbase,Chain,Domain,Term,Ref)%(i,i,i,i,o)
chain_insertz(Dbase,Chain,Domain,Term,Ref)%(i,i,i,i,o)
chain_terms(Dbase,Chain,Domain,Term,Ref)%(i,i,i,o,o)
term_delete(Dbase,Chain,Ref)%(i,i,i)
term_replace(Dbase,Domain,Ref,Term)%(i,i,i,i)
Назначение предикатов в порядке следования: добавления терма в начало цепочки, добавление в конец, вывод информационного содержания терма, удаление терма, замена терма на новый.
Таблица 3.3. Аргументы предикатов.
Аргумент | Назначение |
Dbase | Селектор базы данных |
Chain | Идентификатор цепочки |
Domain | Домен терма |
Term | Предикат с данными |
Ref | Указатель, адрес терма в цепочке |
Использование предикатов требует учета спецификации потока ввода – вывода. Назначение аргументов предикатов сведены в таблицу 3.3.
- Основы построения автоматизированных информационных систем
- Глава 1. Системный подход при разработке автоматизированных информационных систем
- 1.1. Общие положения
- 1.2. Автоматизированные информационные системы
- 1.3. Автоматизированные системы в управлении
- 1.4. Методы анализа автоматизированных информационных систем
- 1.5. Структура автоматизированной информационной системы
- Глава 2. Методы проектирования информационных систем
- 2.1. Обобщенная модель информационной системы и методы проектирования
- 2.2. Каноническое проектирование информационных систем
- 2.3. Управление требованиями, спецификация rup
- 2.4. Модели жизненного цикла информационной системы
- 2.5. Использование case технологий при разработке информационных систем
- 2.6. Методологии case проектирования
- 2.6.1. Методология datarun
- 2.6.2. Методология rad
- 2.6.3. Графические нотации
- 2.7. Системные методологии анализа
- 2.7.1. Методология aris
- 2.7.2. Методология baan
- 2.7.3. Методология Oracle
- 2.7.4. Методология Betec (©)
- Глава 3. Особенности современных информационных систем
- 3.1. Корпоративные информационные системы
- 3.2. Системы обработки транзакций
- 3.3. Системы поддержки принятия решения
- 3.4. Экспертные информационные системы
- 3.4.1. Основы создания информационных систем в Visual Prolog
- 3.4.2. Управления поиском решения в vip
- 3.4.3 Использование рекурсии
- 3.4.4. Управление потоком ввода–вывода
- 3.4.5. Особенности составления описания предметной области
- 3.4.6. Особенности работы с базой фактов
- 3.5. Объектно–ориентированные системы
- 3.6. Документальные системы
- 3.6.1. Информационно-поисковый язык
- 3.6.2. Структра поисковой системы
- 3.7. Гипертекстовые информационные системы
- 4. Управление процессом проектирования автоматизированной информационной системы
- 4.1. Методы управления качеством разработки аис
- 4.2. Оценка эффективности функционирования автоматизированных информационных систем
- 4.2.1. Экономическая эффективность
- 4.2.2. Производительность вычислительной системы
- 4.2.3. Оценка качества работы пользователя системы
- Приложения Приложение №1. Базовые сведения о языке программирования Visual Prolog
- Приложение №.2. Компилирование программ в Visual Prolog ver 5.2.
- Приложение №.3. Программа «Внутренняя база данных фактов»
- Приложение №.4. Программа «Внешняя база данных»
- Приложение №5.Некоторые стилевые параметры
- Список литературы