- •Якимов с.П. Логическое программирование.
- •Красноярск
- •03.04.06 Г., протокол № 9
- •Содержание
- •Введение
- •1 Введение в логическое программирование
- •2 Основные конструкции логического программирования
- •3 Структура программы на языке Пролог
- •4 Вычислительная модель логических программ
- •5 Управление выполнением программы на языке Пролог
- •5.2Caf– метод (CutAndFail– отсечение и отказ)
- •6 Рекурсивные структуры данных
- •7 Программирование баз данных
- •7.1 Управление встроенной базой данных
- •7.2 Управление внешней базой данных
- •8.1 Основные конструкции логического программирования. Факты и правила(2 часа)
- •Контрольные вопросы
- •8.2 Вычислительная модель логических программ. Логические схемы(4 часа)
- •Контрольные вопросы
- •8.3 Управление выполнением программы на языке Пролог. Оконный интерфейс (4 часа)
- •Контрольные вопросы
- •8.4 Рекурсивные структуры данных. Списки (4 часа)
- •Контрольные вопросы
- •8.5 Программирование баз данных. Базы данных (4 часа)
- •Контрольные вопросы
- •Библиографический список
- •Приложение а Ключевые слова
7.2 Управление внешней базой данных
(EXTERNAL DATABASE SYSTEM)
db_create(Db, Name, P) |
(db_selector, string, place) |
| ||||||||||||
(i,i,i) - |
создает внешнюю базу данных Nameна устройствеPи связывает ее с буферомDb. | |||||||||||||
db_open(Db, Name, P) |
(db_selector, string, place) |
| ||||||||||||
(i,i,i) - |
связывает буфер Dbс внешней базой данныхNameорганизованной на устройствеP. | |||||||||||||
db_openinvalid(Db, Name, P) |
(db_selector, string, place) |
| ||||||||||||
(i,i,i) - |
связывает буфер Dbс дефектной внешней базой данныхNameорганизованной на устройствеP. | |||||||||||||
db_close(Db) |
(db_selector) |
| ||||||||||||
(i) - |
закрывает базу данных, связанную с буфером Db. | |||||||||||||
db_delete(Name,P) |
(string,place) |
| ||||||||||||
(i,i) - |
удаляет базу данных, связанную с буфером Dbс устройстваP. | |||||||||||||
db_flush(Db) |
(db_selector) |
| ||||||||||||
(i) - |
освобождает буфер Db | |||||||||||||
db_garbagecollect(Db) |
(db_selector) |
| ||||||||||||
(i) - |
проводит очистку буфера от ненужной («мусорной») информации. | |||||||||||||
db_copy(Db, Name, P) |
(db_selector, string, place) |
| ||||||||||||
(i,i,i) |
делает дубль базы данных, связанной с буфером Db, копируя ее под именемNameна устройствоP. | |||||||||||||
nondeterm db_chains(Db, Chain) |
(db_selector, string) |
| ||||||||||||
(i,o) - |
возвращает идентификаторы цепочек фактов. | |||||||||||||
nondeterm db_btrees(Db, Bt) |
(db_selector, string) |
| ||||||||||||
(i,o) |
возвращает идентификаторы деревъев ссылок. | |||||||||||||
db_statistics(Db, NoOfTerms, MemSize, DbaSize, FreeSize) |
| |||||||||||||
|
(db_selector, real, real, real, real) | |||||||||||||
(i,o,o,o,o) - |
возвращает параметры базы данных, связанной с буфером Db | |||||||||||||
|
NoOfTerms- |
количество фактов в базе, | ||||||||||||
|
MemSize- |
размер буфера, | ||||||||||||
|
DbaSize- |
размер базы данных, | ||||||||||||
|
FreeSize- |
объем свободной области. | ||||||||||||
chain_inserta(Db, Chain, Dom, Term, Ref) |
| |||||||||||||
|
(db_selector, string, symbol, <Domain>, ref) | |||||||||||||
(i,i,i,i,o) - |
заносит в начало базы данных, связанной с буфером Dbв цепочкуChainпредикатTerm, описанный как доменDom, возвращает ссылочное числоRef. | |||||||||||||
chain_insertz(Db, Chain, Dom, Term, Ref) | ||||||||||||||
|
(db_selector, string, symbol, <Domain>, ref) |
| ||||||||||||
(i,i,i,i,o) - |
заносит в конец базы данных, связанной с буфером Dbв цепочкуChainпредикатTerm, описанный как доменDom, возвращает ссылочное числоRef. | |||||||||||||
chain_insertafter(Db, Dom, Ref, Term, NewRef) |
| |||||||||||||
|
(db_selector, symbol, ref,<Domain>, ref) | |||||||||||||
(i,i,i,i,o) - |
заносит в базу данных, связанную с буфером DbпредикатTerm, описанный как доменDom, располагая его после факта со ссылочным числомRefв той же цепочке; возвращает ссылочное число новой записиNewRef. | |||||||||||||
chain_delete(Db, Chain) |
(db_selector, string) |
| ||||||||||||
(i,i) - |
удаляет пустую цепочку фактов из базы данных, связанной с буфером Db. Заканчивается неудачей при попытке удалить непустую цепочку. | |||||||||||||
nondeterm chain_terms(Db, Chain, Dom, Term, Ref) |
| |||||||||||||
|
(db_selector, string, symbol, <Domain>, ref) | |||||||||||||
(i,i,i, _,o) - |
возвращает неизвестные параметры факта, имеющего описание Dom, удовлетворяющего шаблонуTermи хранящегося в цепочкеChainбазы данных, связанной с буферомDb. | |||||||||||||
chain_first(Db, Chain, FirstRef) |
(db_selector, string, ref) |
| ||||||||||||
(i,i,o) - |
возвращает ссылку на первый факт в цепочке Chainбазы данных связанной с буферомDb. | |||||||||||||
chain_last(Db, Chain, LastRef) |
(db_selector, string, ref) |
| ||||||||||||
(i,i,o) - |
возвращает ссылку на последний факт в цепочке Chainбазы данных связанной с буферомDb. | |||||||||||||
chain_next(Db, Ref, NextRef) |
(db_selector, ref, ref) |
| ||||||||||||
(i,i,o) - |
возвращает ссылку на запись расположенную после факта со ссылочным числом Refв той же цепочке базы данных, связанной с буферомDb. | |||||||||||||
chain_prev(Db, Ref, PrevRef) |
(db_selector, ref, ref) |
| ||||||||||||
(i,i,o) - |
возвращает ссылку на запись расположенную перед фактом со ссылочным числом Refв той же цепочке базы данных, связанной с буферомDb. | |||||||||||||
term_delete(Db, Chain, Ref) |
(db_selector, string, ref) |
| ||||||||||||
(i,i,i) - |
удаляет из цепочки Chainбазы данных, связанной с буферомDb, факт со ссылочным числомRef. | |||||||||||||
term_replace(Db, Dom, Ref, NewTerm) |
| |||||||||||||
|
(db_selector, symbol, ref, <Domain>) | |||||||||||||
(i,i,i,i) - |
заменяет в базе данных, связанной с буфером Dbзапись, имеющую ссылочное числоRefна фактNewTermс описаниемDom. | |||||||||||||
ref_term(Db, Dom, Ref, Term) |
| |||||||||||||
|
(db_selector, symbol, ref, <Domain>) | |||||||||||||
(i,i,i, _) - |
возвращает неизвестные параметры факта, имеющего описание Dom, удовлетворяющего шаблонуTermи имеющего ссылочное числоRefв базе данных, связанной с буферомDb. | |||||||||||||
bt_create(Db, BtName, Bt, KeyLen, Order) |
| |||||||||||||
|
(db_selector, string, bt_selector, integer, integer) | |||||||||||||
- (i,i,o,i,i) |
создает дерево ссылок BtNameв базе данных связанной с буферомDbи возвращает идентификатор его буфера.KeyLen– количество значимых символов в ключе при сортировке,Order– длина узла дерева ссылок. | |||||||||||||
bt_open(Db, BtName, Bt) |
| |||||||||||||
|
(db_selector, string, bt_selector) | |||||||||||||
(i,i,o) - |
открывает дерево ссылок BtNameв базе данных связанной с буферомDbи возвращает идентификатор отведенного для него буфера. | |||||||||||||
bt_close(Db, Bt) |
(db_selector, bt_selector) |
| ||||||||||||
(i,i) - |
закрывает дерево ссылок с буфером Bt. | |||||||||||||
bt_delete(Db, BtName) |
(db_selector, string) |
| ||||||||||||
(i,i) - |
удаляет указанное дерево из базы данных. | |||||||||||||
bt_statistics(Db, Bt, NoKeys, NoPages, Dept, KeyLen, Order, PageSize) |
| |||||||||||||
|
(db_selector, bt_selector, real, real, integer, integer, integer, integer) | |||||||||||||
(i,i,o,o,o,o,o,o) - |
возвращает параметры указанного дерева ссылок: | |||||||||||||
|
NoKeys- |
количество ключей в дереве; | ||||||||||||
|
NoPages- |
количество страниц, занимаемых деревом; | ||||||||||||
|
Dept- |
глубина дерева; | ||||||||||||
|
KeyLen- |
количество символов ключа,используемых при сортировке; | ||||||||||||
|
Order- |
длина узла дерева ссылок; | ||||||||||||
|
PageSize- |
размер страницы. | ||||||||||||
key_insert(Db, Bt, Key, Ref) |
|
| ||||||||||||
|
(db_selector, bt_selector, string, ref) | |||||||||||||
(i,i,i,i) - |
добавляет ключ и ссылочное число в дерево ссылок. | |||||||||||||
key_delete(Db, Bt, Key, Ref) |
|
| ||||||||||||
|
(db_selector, bt_selector, string, ref) | |||||||||||||
(i,i,i,i) - |
удаляет ключ и соответствующую ссылку из дерева. | |||||||||||||
key_first(Db, Bt, FirstRef) |
(db_selector, bt_selector, ref) |
| ||||||||||||
(i,i,o) - |
возвращает ссылку, соответствующую первому ключу в дереве, делает его текущим. | |||||||||||||
key_last(Db, Bt, FirstRef) |
(db_selector, bt_selector, ref) |
| ||||||||||||
(i,i,o) - |
возвращает ссылку, соответствующую последнему ключу в дереве, делает его текущим. | |||||||||||||
key_search(Db, Bt, Key, Ref) |
|
| ||||||||||||
|
(db_selector, bt_selector, string, ref) | |||||||||||||
(i,i,i,o) - |
возвращает ссылку, соответствующую указанному ключу. | |||||||||||||
key_next(Db, Bt, NextRef) |
(db_selector, bt_selector, ref) |
| ||||||||||||
(i,i,o) - |
возвращает ссылку, соответствующую следующему ключу в дереве и делает его текущим. | |||||||||||||
key_prev(Db, Bt, PrevRef) |
(db_selector, bt_selector, ref) |
| ||||||||||||
(i,i,o) - |
возвращает ссылку, соответствующую предыдущему ключу в дереве и делает его текущим. | |||||||||||||
key_current(Db, Bt, Key, Ref) |
|
| ||||||||||||
|
(db_selector, bt_selector, string, ref) | |||||||||||||
(i,i,o,o) - |
возвращает ссылку и значение текущего ключа в дереве. |
Контрольные вопросы
Какие встроенные предикаты ввода-вывода вы знаете?
Какая база данных называется внутренней, а какая внешней?
Каким образом описываются предикаты динамической базы данных?
Каковы требования к файлу базы данных в Турбо Прологе?
8 Лабораторный практикум
Все лабораторные работы выполняются и предоставляются на проверку на компьютере в среде Пролог. Для защиты лабораторных работ необходимо ответить на контрольные вопросы, указанные в конце лабораторной работы.