Работа со строками ( string handling )

frontchar(String,FrontChar,RestString) (string,char,string) - (i,o,o) (i,i,o) (i,o,i) (i,i,i) (o,i,i)
Разделяет строку String на две части: первый символ
FrontChar и оставшаяся часть строки RestString.

fronttoken(String,Token,RestString) (string,string,string) - (i,o,o) (i,i,o) (i,o,i)(i,i,i)(o,i,i)
Разделяет строку String на лексему Token и остаток
RestString (выполняется только для строк, состоящих из латинских букв). Лексема - это последовательность символов, определяемая
как: а) имя в соответствии с синтаксисом Турбо-Пролога,
б) строчное представление числа,
в) отдельный символ (может быть пустым - пробел).

frontstr(Lenght,InpString,StartString,RestString) (integer,string,string,string) - (i,i,o,o)
Отрезает от заданной строки InpString строку StartString из


символов, количество которых определяется параметром Lenght. Выдает также оставшуюся часть строки RestString.

concat(String1,String2,String3) (string,string,string) - (i,i,o) (i,o,i) (o,i,i) (i,i,i)
Конкатенация двух строк: String3 = String1 + String2.

str_len(String,Length) (string,integer) - (i,i) (i,o) (o,i)
Определяет длину строки.

isname(StringParam) (string) - (i)
Истинен, если StringParam представляет собой имя, доступное
в Турбо-Прологе. Выполняется только для последовательности символов, состоящей из латинских букв.

format(OutputVariable,FormatString,Variable|Constant*) - (o,i,i)
Выводит по формату FormatString список вывода
Variable|Constant* в строковую переменную OutputVariable.

Преобразования ( CONVERSIONS )

char_int(CharParam,IntgParam) (char,integer) - (i,o) (o,i) (i,i)
Преобразует символ в целое

str_int(StringParam,IntgParam) (string,integer) - (i,o) (o,i) (i,i)
Преобразует строку в целое или наоборот

str_char(StringParam,CharParam) (string,char) - (i,o) (o,i) (i,i)
Преобразует строку в символ или наоборот

str_real(StringParam,RealParam) (string,real) - (i,o) (o,i) (i,i)
Преобразует строку в действительное число или наоборот

upper_lower(StringInUpperCase,StringInLowerCase) (string,string) - (i,i) (i,o) (o,i)
Замена в строке всех прописных букв на строчные и наоборот
(только для строки из латинских букв)


upper_lower(CharInUpperCase,CharInLowerCase) (char,char) - (i,i) (i,o) (o,i)
Замена прописной буквы на строчную и наоборот (только для латинских букв).


Базы данных

2.8.1 Внутренняя база данных
( HANDLING THE INTERNAL DATABASE )

Внутренняя БД хранится в текстовом файле, она может быть целиком считана в оперативную память и быстро обработана. Для объявления формата внутренней БД используется специальный раздел Пролог-программы, выделяемый ключевым словом: database [- <имя>].

consult(DosFileName,InternalDatabaseName) (string,InternalDatabaseName) - (i,i)
Загрузка в ОЗУ из файла DosFileName внутренней базы данных с именем InternalDatabaseName, объявленной как
DATABASE - InternalDatabaseName.

consult(DosFileName) (string) - (i)
Загрузка в ОЗУ из файла DosFileName внутренней базы данных,
объявленной без имени.

save(DosFileName,InternalDatabaseName) (string,DatabaseName) - (i,i)
Сохранение внутренней базы данных, объявленной с именем
InternalDatabaseName, в файле DosFileName.

save(DosFileName) (string) - (i)
Сохранение внутренней базы данных, объявленной без имени, в файле DosFileName.

assert(Term) (InternalDatabaseDomain) - (i)
Добавление терма (факта) Term во внутреннюю базу данных.

asserta(Term) (InternalDatabaseDomain) - (i)
Добавление факта Term в начало базы данных.

assertz(Term) (InternalDatabaseDomain) - (i)
Добавление факта Term в конец базы данных.

nondeterm retract(Term) (InternalDatabaseDomain) - (_)
Удаление из базы данных, объявленной без имени, первого факта, который отождествляется с заданным термом Term.

nondeterm retract(Term,InternalDbaseName) (InternalDatabaseDomain,DatabaseName) - (_,i)
Удаление из базы данных, объявленной с именем DatabaseName,
первого факта, который отождествляется с заданным термом Term.

retractall(_,InternalDbaseName) (_,DatabaseName) - (_,i)
Удаление всех термов во внутренней базе данных с указанным именем InternalDbaseName.

retractall(Term) (InternalDatabaseDomain) - (_)
Удаление всех термов вида Term во внутренней базе данных без имени. Выполняется как retract-fail комбинация; без аргументов. Всегда истенен.

2.8.2 Внешняя база данных ( EXTERNAL DATABASE SYSTEM )

Каждая БД имеет уникальное имя, которое называется селектором БД (db-selector). БД состоит из записей - цепочек (chain).
Каждая запись или цепочка определяется одним или несколькими ключами (key).
Каждое дерево в Прологе имеет уникальное имя, которое имеет специальный тип - селектор В-деpева (bt-selector). Элементами
В-дерева являются ключи.
В системе Пролог допустимо в одной БД хранить цепочки разных типов, отличающиеся по имени отношения и по набору атрибутов. Тип цепочки внешней БД задается с помощью терма. Обычно на месте функтора терма стоит тип объекта, а аргументами терма являются характеристики объекта.



Для организации быстрой обработки небольшого объема информации в Прологе имеется механизм внутренней БД.

Основные типы данных, используемые во внешних БД:
1) Атомы и термы.
relation = city; person /* атомы */
db_domain = person (person_name, cod, adress, list);
city (cod, name) /* термы */
2) Адрес (ссылка).
/* физический адрес расположения записи на МД */
ref = x1,adr
3) Селектор БД.
db_selector = dba, pers /* имя БД */
4) Селектор В-дерева. bt_selector = I1, I2, I3
5) Файлы.
file = text ; ins
6) Стандартные типы данных.

Предикаты для создания БД:

db_create(Dbase,Name,Place) (db_selector,string,place) - (i,i,i)
Создать БД с селектором БД Dbase, которая связывается с файлом Name, и будет размещена в Plase.
place = in_file - место размещения БД в файле;
in_memory - или в оперативной памяти.
Пример: db_create (dba, "curs.bin", in_file)

db_open(Dbase,Name,Place) (db_selector,string,place) - (i,i,i)
Открыть БД с селектором БД Dbase, которая связана с файлом
Name, и должна быть размещена в Plase. db_open (pers, "t.bin", in_file)

db_openinvalid(Dbase,Name,Place) (db_selector,string,place) - (i,i,i)
Открыть ранее не закрытую базу данных Dbase. db_close(Dbase) (db_selector) - (i)
Закрыть БД с селектором БД Dbase. db_close (pers)

db_delete(Name,Place) (string,place) - (i,i)
Удалить БД, которая связана с файлом Name, и размещена в Plase.
db_delete ("curs.bin", in_file)

db_copy(Dbase,Name,Place) (db_selector,string,place) - (i,i,i)
Копировать БД с селектором БД Dbase в файл Name с размещением
в Plase.
db_copy (pers, "t_new.bin", in_file)

db_flush(Dbase) (db_selector) - (i)
Организовать пересылку данных, не дожидаясь заполнения буфера, в базу данных Dbase. db_flush (pers)

db_garbagecollect(Dbase) (db_selector) - (i)
Собрать свободные участки памяти для БД Dbase, т.е. организовать сборку мусора данных в базе данных Dbase. db_garbagecollect (db_selector)

Предикаты по работе с В-деревьями:

bt_create(Dbase,BtreeName,Btree_selector,KeyLen,Order) (db_selector,string,bt_selector,integer,integer)
- (i,i,o,i,i)
Создать В-дерево для БД Dbase типа BtreeName с селектором Btree-selector, длиной ключа KeyLen и порядком дерева (количество ключей в узле дерева) Order.
Пример: bt_create (pers,person_name,I1,30,4) - ключ ФИО. bt_create (pers,adress,I2,20,5) - ключ адрес.

bt_open(Dbase,BtreeName,Btree_selector) (db_selector,string,bt_selector) - (i,i,o)
Открыть В-дерево BtreeName типа Btree_selector для БД Dbase. bt_open (pers, person_name, I1)
bt_close(Dbase,Btree_selector) (db_selector,bt_selector) - (i,i)
Закрыть В-дерево Btree_selector для БД Dbase. bt_close (pers, I1)

bt_delete(Dbase,BtreeName) (db_selector,string) - (i,i)
Удалить В-дерево Btree_selector для БД Dbase. bt_delete (pers, person_name)

nondeterm db_btrees(Dbase,Btree) (db_selector,string) - (i,o)
Запрос о В-деревьях для БД Dbase. Btree унифицируется с типом
В-дерева. db_btrees(pers,X)
и X может быть унифицировано с "person_name"

Предикаты статистики:

db_statistics(Dbase,NoOfTerms,MemSize,DbaSize,FreeSize) (db_selector,real,real,real,real) - (i,o,o,o,o)
Выдать статистические данные по базе данных Dbase, где: NoOfTerms - число термов (количество записей),
MemSize - размер буфера ОЗУ в байтах, DbaSize - размер базы в байтах,
FreeSize - свободное место на устройстве в байтах.

Пример: db_statistics (pers, Nch, M, D, FM)

bt_statistics(Dbase,Btree_selector,NoOfKeys,NoOfPages, Dept,KeyLen,Order,PageSize) (db_selector,bt_selector,real,real, integer,integer,integer,integer) -(i,i,o,o,o,o,o,o)
Выдать статистику о В-дереве Btree_selector базы данных
Dbase, где NoOfKeys - количество ключей, NoOfPages - количество_страниц, Dept - глубина B-дерева,
KeyLen - длина_ключа, Order - порядок В-дерева,
PageSize - размер_страницы. bt_statistics (pers, I1, A, B, C, D, E, F)

Предикаты для работы с цепочками записей заданного типа:

nondeterm db_chains(Dbase,Chain) (db_selector,string) - (i,o) Выдать имена типов записей Chain из базы данных Dbase. db_chains (dba, Сh)
Сh=city - при первом подходе,
Сh=person - при втором.

chain_inserta(Dbase,Chain,Domain,Term,Ref) (db_selector,string,symbol,,ref) - (i,i,i,i,o)
Записать терм Term со структурой Domain и с именем Chain в начало базы данных Dbase и выдать физический адрес записи (ссылку) Ref.
Пример: chain_inserta(pers,city,db_domain,city(095,"Москва"),R)

chain_insertz(Dbase,Chain,Domain,Term,Ref) (db_selector,string,symbol,,ref) - (i,i,i,i,o)
Записать терм Term со структурой Domain и с именем Chain в конец базы данных Dbase и выдать физический адрес записи (ссылку) Ref.

chain_insertafter(Dbase,Domain,Ref,Term,NewRef) (db_selector,symbol,ref,,ref) - (i,i,i,i,o)
Добавить терм (запись) Term типа Domain в базу данных Dbase после адреса Ref и выдать физический адрес для этой записи (ссылку) NewRef.

chain_delete(Dbase,Chain) (db_selector,string) - (i,i)
Удалить все записи типа Chain из базы данных Dbase.

Передвижение по цепочке:

БД Пролога позволяют следить за текущей цепочкой записей заданного типа с помощью специальной структуры данных (маркера). Он представляется как указатель, указывающий на запись в БД, записанную или прочитанную последней.

chain_first(Dbase,Chain,FirstRef)
(db_selector,string,ref) - (i,i,o)
Выдать адрес (ссылку) FistRef первого терма c именем Chain
из базы данных Dbase.

chain_last(Dbase,Chain,LastRef) (db_selector,string,ref) - (i,i,o)
Выдать адрес (ссылку) LastRef последнего терма c именем
Chain из базы данных Dbase.

chain_next(Dbase,Ref,NextRef) (db_selector,ref,ref) - (i,i,o)
Выдать адрес (ссылку) NextRef cледующего терма для терма с адресом Ref из базы данных Dbase.

chain_prev(Dbase,Ref,PrevRef) (db_selector,ref,ref) - (i,i,o)
Выдать адрес (ссылку) NextRef предыдущего терма для терма с адресом Ref из базы данных Dbase.

Работа с записями базы данных:

nondeterm chain_terms(Dbase,Chain,Domain,Term,Ref) (db_selector,string,symbol,,ref) - (i,i,i,_,o)
Выдать терм Term базы данных Dbase типа Domain из цепочки записей типа Chain и его адрес (ссылку) Ref.

term_delete(Dbase,Chain,Ref) (db_selector,string,ref) - (i,i,i)
Удалить терм из цепочки записей Chain и адресом (ссылкой) Ref в базе данных Dbase.

term_replace(Dbase,Domain,Ref,NewTerm) (db_selector,symbol,ref,) - (i,i,i,i)
Заменить терм типа Domain в цепочке записей Chain с адресом
(ссылкой) Ref в базе данных Dbase на новый терм NewTerm.

ref_term(Dbase,Domain,Ref,Term) (db_selector,symbol,ref,) - (i,i,i,_)
Выдать терм Term c адресом (ссылкой) Ref со структурой Domain
из базы данных Dbase.


Передвижение по дереву поиска и формирование дерева поиска:

key_insert(Dbase,Btree,Key,Ref) (db_selector,bt_selector,string,ref) - (i,i,i,i)
Включить ключ Key в В-дерево поиска Btree базы данных Dbase.
Ref содержит адрес цепочки, которая соответствует этому ключу. key_insert (dba, city, "123", R)

key_delete(Dbase,Btree,Key,Ref) (db_selector,bt_selector,string,ref) - (i,i,i,i)
Удалить ключ Key в В-дереве Btree базы данных Dbase. Ref содержит адрес цепочки, которая соответствует этому ключу.

Каждое B-дерево сохраняет (поддерживает) внутренний указатель на свои узлы. Key_first и key_last позволяют вам ставить указатель на первый и последний ключ соответственно, key_search на заданный, key_current - на текущий.

key_first(Dbase,Btree,FirstRef) (db_selector,bt_selector,ref) - (i,i,o)

key_last(Dbase,Btree,LastRef) (db_selector,bt_selector,ref) - (i,i,o)

key_search(Dbase,Btree,Key,Ref) (db_selector,bt_selector,string,ref) - (i,i,i,o)
Если ключ не найден, key_search - возвращает значение fail,
но указатель будет указывать на тот ключ, сразу после которого искомый ключ должен был бы разместиться.
key_search (dba, Bcity, "075", R)

key_current(Dbase,Btree,Key,Ref) (db_selector,bt_selector,string,ref) - (i,i,o,o)

Предикаты key_next и key_prev служат для передвижения указателя B-дерева вперед или назад в отсортированном дереве.

key_next(Dbase,Btree,NextRef) (db_selector,bt_selector,ref) - (i,i,o)

key_prev(Dbase,Btree,PrevRef)
(db_selector,bt_selector,ref) - (i,i,o)

Если указатель стоит в одном из концов, то попытки передвинуть указатель дальше ,будут безуспешны, и указатель будет действовать так, как если бы он был помещен в одной из позиций вне дерева.

Наши рекомендации