Встроенные предикаты для работы с базами даннях.

 

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

Встроенные предикаты дают возможность корректировать эту базу данных (БД) в процессе выполнения программы. Это делается:

1) добавлением к программе (в процессе вычислений) новых фактов;

2) вычеркиванием из нее уже существующих фактов.

Следующие цели (предикаты) выполняют операции над БД:

1. Цель assert(d) всегда успешна и добавляет факт d к базе данных;

2. Цель retract(d) удаляет факт, сопоставимый с d;

3. asserta(d) - обеспечивает запись в базу данных нового факта перед имеющимися фактами для заданного отношения;

4. assertz(d) - обеспечивает запись в базу данных нового факта после всех имеющихся фактов для заданного отношения.

Объявление динамической базы данных, в которую факты могут добавляться во время выполнения программы или выбираться из файла посредством предиката consult, осуществляется посредством ключевого слова database.

 

Создание баз данных в Турбо-Прологе.

 

Рассмотрим следующий пример статической БД.

Пример 1.

 

Domains

tip,fun=symbol

x,kol=integer

 

Database

ms(tip,fun,x,kol)

/* tip - тип микросхемы; fun - реализуемая функция;

x - число входов; kol - число элементов */

 

Clauses

ms(k155la3,i_ne,2,4). ms(k155la4,i_ne,3,3). ms(k155la1,i_ne,4,2).

ms(k155ln1,ne,1,6). ms(k155le1,ili,2,4). ms(k155li3,i,3,3).

 

Ввод строки assertz(ms(k155ir1,rg,4,4)) приводит к добавлению факта s(k155ir1,rg,4,4) в базу данных.

Ввод строки retract(ms(Q,i_ne,W,E)) приведет к удалению из БД всех объектов для элементов типа i_ne.

Для сохранения БД на диске в заданном файле (например, mybase.dba) необходимо ввести строку

save("mybase.dba").

Затем в этой же или в другой программе на основе полученного файла можно создать новую БД. Для этого необходимо ввести строку

consult("mybase.dba").

В результате существующая БД дополняется объектами из файла mybase.dba.

Для сохранения поименованной БД используется предикат

save(DosFileName,DataBaseName).

Для создания поименованной БД из фактов, расположенных в файле, используем предикат

consult(DosFileName,DataBaseName).

 

Накопление в базе данных ответов на вопросы.

 

Одним из полезных применений предиката asserta является накопление уже вычисленных ответов на вопросы. Пусть, например, в программе определен предикат

solve(Problem,Solution).

Мы можем теперь задать вопрос и потребовать, чтобы ответ на него был запомнен для того, чтобы облегчить получение ответов на будущие вопросы:

solve(Problem,Solution), asserta(solve(Problem,Solution)).

Если в первой из приведенных целей будет успех, ответ (Solution) будет сохранен, а затем использован так же, как и любое другое пр ложение, при ответе на дальнейшие вопросы. Преимущество такого "запоминания" состоит в том, что на дальнейшие вопросы, сопоставимые с добавленным фактом, ответ будет получен, как правило, значительно быстрее, чем в первый раз. Ответ теперь будет получен как факт, а не как результат вычислений, требующих, возможно, длительного времени.

 

Задание итерации.

 

Цель repeat порождает новую ветвь вычислений. Для этого она должна быть определена в программе следующим образом

repeat.

repeat :- repeat.

 








Дата добавления: 2016-05-05; просмотров: 692;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.