русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2013-12-23; просмотров: 2999; Нарушение авторских прав


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

Раздел программы facts в Visual Prolog предназначен для описания предикатов динамической (внутренней) базы данных. База данных называется динамической, так как во время работы программы из нее можно удалять любые факты, а также добавлять новые факты. В этом состоит ее отличие от статических баз данных, где факты являются частью кода программы и не могут быть изменены во время исполнения.

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

Следует отметить два ограничения, объявленные в разделе facts :

· в динамической базе данных Пролога могут содержаться только факты;

· факты базы данных не могут содержать свободные переменные.

Допускается наличие нескольких разделов facts , тогда в описании каждого раздела facts нужно явно указать его имя, например facts – mydatabase. В двух различных разделах facts нельзя использовать одинаковые имена предикатов. Также нельзя использовать одинаковые имена предикатов в разделах facts и predicates. Если имя базы данных не указывается, то ей присваивается стандартное имя dbasedom. Программа может содержать локальные безымянные разделы фактов, если она состоит из единственного модуля, который не объявлен как часть проекта. Среда разработки компилирует программный файл как единственный модуль только при использовании утилиты TestGoal. Иначе безымянный раздел фактов должен быть объявлен глобальным, то есть как global facts.



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

* assert;

* asserta;

* assertz;

* retract;

* retractall;

* save;

* consult.

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

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

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

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

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

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

facts

dbin (byte, byte, byte, byte)

predicates

cifra (byte)

bin (byte, byte, byte, byte)

clauses

cifra (0).

cifra (1).

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

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

goal

bin (A, B, C, D).

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

facts

dcount (word)

predicates

modcount

clauses

dcount (0).

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

goal

modcount.

Пример 57:Написать программу, определяющую родственные отношения.

facts

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(dbrothers(X,Y)),

asserta(dbrothers(X,Y)).

goal

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



<== предыдущая лекция | следующая лекция ==>
Эта операция в Visual Prolog называется оптимизацией хвостовой рекурсии или оптимизацией последнего вызова. | Использование строк в Прологе.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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