Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Создание динамических баз данных




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

Для преобразования данных из одного типа в другой Турбо-Пролог имеет следующие встроенные предикаты:

upper_lower;

str_char;

str_int;

str_real;

char_int.

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

Пример 45:

upper_lower («STARS», S2).

upper_lower (S1,«stars»).

str_char («T», C).

str_char (S, ’T’).

str_int («123», N).

str_int (S, 123).

str_real («12.3», R).

str_real (S, 12.3).

char_int (‘A’, N).

char_int (C, 61).

В Турбо-Прологе нет встроенных предикатов для преобразования действительных чисел в целые и наоборот, или строк в символы. На самом деле, правила преобразования данных типов очень просты и могут быть заданы в программе самими программистом.

Пример 46:

predicates

conv_real_int (real, integer)

conv_int_real (integer, real)

conv_str_symb (string, symbol)

clauses

conv_real_int (R, N):- R=N.

conv_int_real (N, R):- N=R.

conv_str_symb (S, Sb):- S=Sb.

goal

conv_real (5432.765, N). (N= 5432).

conv_int_real (1234, R). (R=1234).

conv_str_symb («Turbo Prolog», Sb). (Sb=Turbo Prolog).

Пример 47: преобразование строки в список символов с использованием предиката frontchar.

domains

list=char*

predicates

convert (string, list)

clauses

convert («», []).

convert (Str, [H\T]):- frontchar(Str, H, Str1),

convert(Str1, T).

В Турбо-Прологе существуют специальные средства для организации баз данных. Эти средства рассчитаны на работу с реляционными базами данных, так как внутренние подпрограммы унификации осуществляют автоматическую выборку фактов с нужными значениями известных параметров и присваивают значения неопределенным параметрам.

Раздел программы database в Турбо-Прологе предназначен для описания предикатов динамической базы данных. База данных называется динамической, так как во время работы программы из нее можно удалять любые факты, а также добавлять новые факты. В этом состоит ее отличие от статических баз данных, где факты являются частью кода программы и не могут быть изменены во время исполнения.

Иногда бывает полезно иметь часть информации базы данных в виде фактов статической БД - эти данные заносятся в динамическую БД сразу после активизации программы. В общем случае, предикаты статической БД имеют другое имя, но ту же самую форму представления данных, что и предикаты динамической БД. Добавление латинской буквы d к имени предиката статической БД - обычный способ различать предикаты динамической и статической БД.

Следует отметить, что в динамической базе данных Турбо-Пролога могут содержаться только факты, что отличает Турбо-Пролог от других реализаций Пролога.

В Турбо-Прологе есть специальные встроенные предикаты для работы с динамической базой данных:

* assert;

* asserta;

* assertz;

* retract;

* retractall;

* save;

* consult.

* Предикаты assert, asserta, assertz, - позволяют занести факт в БД, а предикаты retract, retractall - удалить из нее уже имеющийся факт.

Предикат assert заносит новый факт в БД в произвольное место, предикат asserta добавляет новый факт перед всеми уже внесенными фактами данного предиката, assertz добавляет новый факт после всех фактов данного предиката.

Предикат retract удаляет из БД первый факт, который сопоставляется с заданным фактом, предикат retractall удаляет из БД все факты, которые сопоставляются с заданным фактом.

Предикат save записывает все факты динвмической БД в текстовый файл на диск, причем в каждую строку файла заносится один факт. Если файл с заданным именем уже существует, то старый файл будет затерт.

Предикат consult записывает в динамическую БД факты, считанные из текстового файла, при этом факты из файла дописываются в имеющуюся БД. Факты, содержащиеся в текстовом файле должны быть описаны в разделе domains.

Пример 48:Написать программу, генерирующую множество 4-разрядных двоичных чисел и записывающих их в динамическую БД.

database

dbin (integer, integer, integer, integer)

predicates

cifra (integer)

bin (integer, integer, integer, integer)

clauses

cifra (0).

cifra (1).

bin (A, B, C, D):- cifra (A), cifra (B), cifra (C), cifra (D),

assert (bin (A, B, C, D)).

Пример 50:Написать программу, подсчитывающую число обращений к программе.

database

dcount (integer)

predicates

modcount

clauses

dcount (0).

modcount:- dcount (N), M=N+1, retract (dcount (N)),asserta (dcount (M)).

Пример 51:Написать программу, подсчитывающую число обращений к программе.

database

dsisters(symbol,symbol)

dbrothers(symbol,symbol)

predicates

parents(symbol,symbol)

pol(symbol,symbol)

sisters(symbol,symbol)

brothers(symbol,symbol)

clauses

parents (anna, olga).

parents (petr, olga).

parents (anna, irina).

parents (petr, irina).

parents (anna, ivan).

parents (petr, ivan).

pol(olga, w).

pol(anna,w).

pol(petr, m).

pol(irina, w).

pol(ivan, m).

sisters (X, Y):-dsisters(X, Y).

sisters (X, Y):- parents (Z, X), parents (Z,Y),pol(X,w),

pol(Y,w),not(X=Y),not(dsisters(X,Y)),

asserta(dsisters(X, Y)).

brothers (X,Y):-dbrothers(X, Y).

brothers (X, Y):- parents (Z,X), parents l(Z,Y),pol(X,m),

pol(Y,m),not(X=Y),not(dsisters(X,Y)),

asserta(dbrothers(X,Y)).

goal

sisters (X, Y), save (“mybase.txt”).




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


Дата добавления: 2015-06-27; Просмотров: 1045; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.018 сек.