НОВОСТИ   БИБЛИОТЕКА   ЮМОР   КАРТА САЙТА   ССЫЛКИ   О САЙТЕ  




предыдущая главасодержаниеследующая глава

5.3. Средства модификации записей

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

1. В каждом предложении adjl и adj2 связь ео списком данных задается с помощью отношения form. Хотя имя этого отношения в данном случае достаточно удобно, следует все-таки использовать более общие, универсальные имена отношений, такие, как stat или data. Выбранное имя должно быть включено з список импорта модуля ADJUST. Следует избегать длинных списков импорта и стараться пользоваться одним универсальным отношением. Пусть, например, в качестве имени универсального отношения выбрано data. Тогда для того, чтобы можно было импортировать имя выбранного отношения из прикладной программы, в нее необходимо добавить следующий фрагмент:

X data Y if

X form Y

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

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

3. Запрос типа "Team X score Z х Team У" удобен для обработки данных турнирных таблиц, но явно не подходит для других приложений.

Программа 5.4 обеспечивает работу с базами данных более общего типа. При этом пользователь должен указать список всех используемых полей, всех ключей и всех отношений" связывающих ключи с полями.

Программа 5.4

begin X if

(X list fields) is-told and

(held Ж) add and

Y zero X and

(zero-field Y)add

begin X if

(X list keys) is-told and

(key X) add

begin (X Y Z) if

(Y state relation name) is-told and

zero-field Z and

key x and

X OM x and

(X Y Z) add

(∅)zero(X)

(∅ X)zero(Y;Z) if

X zero Z

Отношение zero возвращает список, содержащий число нулей равное числу элементов заданного списка. Например:

which (x: x zero (a b с d e))

( ∅ ∅ ∅ ∅ ∅)

No (more) answers

Первое предложеяие отношения begin запрашивает у пользователя имена всех полей для обработки и затем добаьляет к программе, находящейся в рабочей области, два предложенья:

field (abed e)

zero field ( ∅ ∅ ∅ ∅ ∅)

где a, b, с, d и е - имена полей, названные пользователем, a zero field представляет собой список с числом нулей, равным числу названных полей.

С помощью предложений отношения begin пользователь вводит значения ключей. После этого к программе, находящейся р рабочей области, добавляется предложение: "key (ABCD)", где А, B, С и D - значения ключей.

В третьем предложении запрашивается имя отношения и в рабочую область записывается по одному предложению с введенным именем отношения для каждого ранее введенного ключа, В рассматриваемом примере будут добавлены предложения следующего вида:

А rеl ( ∅ ∅ ∅ ∅ ∅)

В rel ( ∅ ∅ ∅ ∅ ∅)

и т. д.

Здесь rel - имя отношения, выбранное пользователем. Следует отметить, что в выражении "(X Y Z) add" из третьего правила программы 5.4 символ Y обозначает имя введенного отношения.

Таким образом, пользователь добавляет к своей программе отношение, определенное им самим.

Возможность использования имен отношений в качестве переменных представляет собой одно из мощных средств Пролога. В рассматриваемом случае данная возможность позволяет пользователю создать свой язык управления базой данных. Следует отметить, что для правильной работы программы 5.4 число полей и число ключей не должно быть меньше двух. Для каждого списка полей и каждого списка ключей может быть задано несколько разных имен отношений. Ниже приведен пример работы, программы 5.4:

all (x: begin X)

(определить все (х: инициализация х)]

X list ail fields ? just (won drew lost for against)

[X перечислить все поля? последний-ответ (выиграно вничью проиграно забито пропущено)]

(won drew lost for against)

[(выиграно вничью проиграно забито пропущено)]

X list all keys ? just (Mnutd Lpool Chlse Arsnl)

X перечислить все ключи? последний-ответ (Манчестер-Юнайтед Ливерпуль Челси Арсенал)]

(Mnuted Lpool Chlse Arsnl)

[(Манчестер-Юнайтед Ливерпуль Челси Арсенал)]

X state relation name ? just form

[X установить имя отношения? последний-ответ form]

(Mnutd form ( ∅ ∅ ∅ ∅ ∅))

(Lpool form ( ∅ ∅ ∅ ∅ ∅))

(Chise form ( ∅ ∅ ∅ ∅ ∅))

(Arsnl form ( ∅ ∅ ∅ ∅ ∅))

No (more) answers

[Ответов (больше) нет]

Приняв информацию от пользователя, программа повторяет введенные им списки имен, полей и ключей, а затем использует их при формировании предложений типа "((ключ) (отношение) ( ∅ ∅ ∅...))". Для того чтобы избежать повторений Пролог-системой вводимой информации, необходимо вместо "all (х : begin x)" использовать "all (: begin x)".

В результате работы программы к базе данных, находящейся в рабочей области, будут добавлены следующие предложения:

field (won drew lost for against)

zero-field ( ∅ ∅ ∅ ∅ ∅)

key (Mnutd Lpool Chlse Arsnl)

(Mnutd form ( ∅ ∅ ∅ ∅ ∅))

(Lpool form ( ∅ ∅ ∅ ∅ ∅))

(Chilse form ( ∅ ∅ ∅ ∅ ∅))

(Arsnl form ( ∅ ∅ ∅ ∅ ∅))

Как было указано выше, можно определить несколько имен отношений, хотя обычно этого не требуется. Примером такого случая, когда для одного отношения могут понадобиться два различных имени, является вариант представления турнирной таблицы, когда списки с результатами игр, проведенных дома, хранятся отдельно от списков с результатами матчей на чужих полях. В качестве имен отношений для такого способа хранения информации могут быть выбраны, например, hform и aform для каждой из двух указанных частей базы данных соответственно. В этом случае с помощью двух отношений устанавливается связь между именем ключа (названием команды) и соответствующими двумя списками. В рассмотренном выше примере был определен входной формат, в котором для каждой команды обеспечивался ввод следующих полей: won (число выигранных матчей), lost (число проигрышей), for (забитые мячи) и against (пропущенные мячи). Вводимые данные помещались в эти списки, относящиеся к одной и той же команде.

Однако можно предусмотреть раздельный ввод в эти два списка:

all (: begin x)

[определить все (: инициализация х)]

X list all fields ? just (won drew lost for against)

[X перечислить все поля? (выиграно вничью проиграно забито пропущено)]

X list all keys ? just (Mnutd Lpool Chlse Arsnl)

[X перечислить все ключи? последний-ответ (Манчестер-Юнайтед, Ливерпуль, Челси, Арсенал)]

X state relation name ? ans hform

[X установить имя отношения? ответ hform]

X state relation name ? just aform

[X установить имя отношения? последний-ответ aform]

Здесь Пролог-система не повторяет вводимых пользователем строк, так как запрос начинается с предложения "all (: begin х)". В результате работы программы 5.4 к рабочей области будут добавлены следующие предложения:

field (won drew lost for against)

zero-field ( ∅ ∅ ∅ ∅ ∅)

key (Mnutd Lpool Chlse Arsnl)

(Mnutd hform ( ∅ ∅ ∅ ∅ ∅))

(Lpool hform ( ∅ ∅ ∅ ∅ ∅))

(Chlse hform ( ∅ ∅ ∅ ∅ ∅))

(Arsnl hform ( ∅ ∅ ∅ ∅ ∅))

(Mnutd aform ( ∅ ∅ ∅ ∅ ∅))

(Lpool aform ( ∅ ∅ ∅ ∅ ∅ ))

(Chlse aform ( ∅ ∅ ∅ ∅ ∅))

(Arsnl aform ( ∅ ∅ ∅ ∅ ∅))

Программа 5.4 может быть использована для создания баз данных различного типа. Таким образом, по сравнению с ранее рассмотренной программой, основанной на отношении setup, ее можно считать более универсальной. Прежде чем продолжить изучение книги, читателю рекомендуется выполнить упражнения 5.5 и 5.6.

Упражнение 5.5

С помощью программы 5.4 создайте базу данных для трех фирм - Мак Ду (McDoo), Фи (Fee) и Хоум (Ноте), торгующих строительными материалами: песком (sand), цементом (cement), кирпичом (bricks), бетонными блоками (blocks), гравием (gravel), штукатуркой (plaster) и краской (paint). Начальные значения полей должны быть нулевыми.

Упражнение 5.6

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

предыдущая главасодержаниеследующая глава








© Злыгостев А.С., 2001-2019
При использовании материалов сайта активная ссылка обязательна:
http://informaticslib.ru/ 'Библиотека по информатике'
Рейтинг@Mail.ru
Поможем с курсовой, контрольной, дипломной
1500+ квалифицированных специалистов готовы вам помочь