Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы пролог часть 2.docx
Скачиваний:
3
Добавлен:
26.09.2019
Размер:
57.02 Кб
Скачать

45. Использование звука и музыки

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

своей программе, можно утверждать, что она будет лучше организована и более дружелюбна по отношению к пользователю.

Предикаты генерации звука

Турбо-Пролог поддерживает два предиката генерации звука:

sound и beep. Предикат beep генерирует звук высокой тональности. Его вид прост, поскольку этот предикат параметров не имеет.

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

сигналы во всем диапазоне слышимых человеком звуков.

Предикат sound имеет следующий вид:

sound(Duration,Frequency) Значение параметра Duration задает длительность звукового сигнала в сотых долях секунды. Значение параметра Frequency определяет частоту генерируемого звука (высота звука).

Следующее правило иллюстрирует этот ме-

тод.make_a_note :-

sound(5,165),

sound(10,247).

Данное правило генерирует ноту ми в течение 0.05 с., и но-

ту си - 0.10 с.

Звуки, генерируемые в данном примере, выбираются из диапазона музыкальных частот.

Музыкальные фрагменты

Музыкальный фрагмент - короткая, энергичная и легко распознаваемая последовательность нот. Таких фрагментов существует достаточно много.

46. Базы данных в прологе. Предикаты динамическое бд.

СУБД являются компьютеризованной системой хранения информации. Данные в БД представляют собой набор фактов и цифр, записанных в доступной для компьютера форме. Эта упорядоченная совокупность и является содержимым базы данных. СУБД должны предоставлять возможность добавления, удале-

ния и корректировки данных. Эти функции реализуются специальными программами. Совокупность базы данных и функциональных

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

Чтобы понять, как в Турбо-Прологе реализуется обращение к БД, рассмотрим запрос dplayer("Bernie Kosar",Team,Pos).

В этом утверждении Team и Pоs есть переменные, значения которых нужно найти. Когда этот запрос (цель) испытывается, процедуры Турбо-Пролога просматривают утверждения БД на предмет сопоставления с утверждением, содержащим Bernie Kosar. Так

как в базе данных такое утверждение присутствует, то переменной Team присваивается значение Cleveland Browns, а переменной Pos - QB.

Если трактовать dplayer как предикат БД Турбо-Пролог, то отсюда следует с необходимостью такое его описание database

dplayer(name,team,position)

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

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

БД, соответствующий предикату dplayer динамической базы данных, есть predicates

player(name,team,position)

clauses

player("Dan Marino","Miami Dolphins","QB").

player("Richart Dent","Chicago Bears","DE").

Заметим, что все отличие предиката dplayer по сравнению с player заключается лишь в одной лишней букве терма. Добавление латинской буквы d - обычный способ различать предикаты

динамической и статической баз данных.

Предикаты динамической базы данных.

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

Таковыми являются asserta, assertz, retract, save, consult, readterm и

findall.

* Предикаты для работы с утверждениями динамической базы данных.

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

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

Предикат assertz так же, как и asserta, заносит новые утверждения в базу данных. Однако он помещает новое утверждение за всеми уже имеющимися в базе утверждениями того же предиката. И тд.

* Предикаты для работы с базой данных в целом

Предикаты save и consult применяются для записи динамической БД в файл на диск и для загрузки содержимого файла в динамическую БД. Предикат save cохраняет находящуюся в оперативной памяти базу данных в текстовом файле. Синтаксис этого предиката save(DOS_file_name

Для загрузки файла футбольной БД требуется выражение consult("football.dba").

Предикат readterm используется для чтения из файла объектов, относящихся к определенному в программе домену. И тд.

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

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

1) размер базы данных ;

2) организацию элементов базы данных ;

3) способы работы и содержания базы данных .

Использование баз данных, располагающихся в оперативной памяти (резидентных), вполне оправданно, если эта БД имеет не слишком большой объем.

Для начала необходимо задать начальные данные и создать саму базу. Затем наступает черед системы управления базой

данных (СУБД), ориентированной на диалог с пользователем. Любая система такого рода должна содержать как минимум такие

возможности:

1) занесение в базу новых данных ;

2) удаление данных из базы ;

3) выборка и вывод содержащихся в базе данных.

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

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

Как уже ранее говорилось, в начале работы программы необходимо занести в динамическую БД предназначенную для нее информацию, содержащуюся в статической БД. Эту задачу выполняет предикат assert_database. Предикат clear_database предназначен для решения смежной задачи: очиски БД перед окончанием работы программы. Задачей предиката error является реагирование на ввод неправильной входной информации. Предикат player предназначен для задания начального содержимого базы данных. Когда программа начинает работу, эта информация засылается в утверждения предиката dplayer. Предикат do_mbase является главным правилом (модулем) программы. Он также присутствует в целевом утверждении. Предикат menu определяет правило, осуществляющее интерфейс с пользователем при помощи меню. Предикат process(integer) определяет различные правила, выполняющие все возможные операции над БД.