Скачиваний:
24
Добавлен:
01.05.2014
Размер:
356.35 Кб
Скачать

Процедура "отобразитьсостояния"

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

в данный момент:

| ?— отобразитьсостояния.

бумага

красная_рулоны

тяжелая_красная_рулоны

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

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

Реализация программы, выполняющей запросы

Программа доступа к ведомости сведений о бумаге реализуется при помощи связывания множества значений атрибутов с каждым состоянием. Если значением атрибута является неконкретизированная переменная, то в данном состоянии для этого атрибута отсутствует критерий выбора. Однако если значением атрибута является атом, то он действует как критерий выбора для данного состояния. Значения всех атрибутов, связанные с состоянием "бумага", — это неконкретизированные переменные, так как данное состояние не обладает критериями выбора. Значения атрибутов представляются в виде фактов "за" (сокращение от "значение атрибута") .

% критерии выбора для состояния "бумага":

% Состояние Атрибут Значение

за (бумага, тип. Т).

за (бумага, марка, М).

за (бумага, вес, В).

за (бумага, поверхность, П).

за (бумага, цвет, Ц).

Наследование значений атрибутов

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

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

Результат создания состояния « красная-рулоны »

В результате действия запроса «з (бумага, красная _рулоны)>> , приведенного выше, в текущую программу добавляются следующие фразы:

порождение (красная—рулоны, бумага).

% критерии выбора для состояния "красная—рулоны":

% Состояние Атрибут Значение

за(красная_рулоны, тип, рулоны).

за (красная—рулоны, цвет, красный).

Обратите внимание на то, что значениями атрибутов являются атомы, а не неконкретизированные переменные, как это имело место выше для атрибутов состояния «бумага». Значения атрибутов «тип» и «цвет», связанные с состоянием « красная—рулоны» , перекрывают значения этих атрибутов, унаследованные от состояния "бумага". Нижеследующие запросы к процедуре "послать" показывают, что значения трех других атрибутов состояния «красная _рулоны» все еще наследуются от состояния « бумага ».

| ?— послать (красная—рулоны, за (тип, V)).

V = рулоны % из состояния "красная—рулоны"

| ?- послать (красная_рулоны, за (марка, V)).

V = _1 % из состояния "бумага"

| ?— послать (красная—рулоны, за (вес, V} ).

V= _1 % из состояния "бумага"

| ?—послать (красная—рулоны, за (поверхность, Г)).

V = _1 % из состояния "бумага"

| ?- послать (красная—рулоны, за (цвет, V ) ).

V = красный % и", состояния "красная—рулоны"

Результат создания состояния « тяжелая_красная_рулоны »

В результате приведенного выше обращения « з (тяжелая—красная__ру-лоны, красная „рулоны)» в текущую программу будут добавлены такие фразы:

порождение (тяжелая_красная_рулоны, красная_рулоны).

за (тяжелая—красная—рулоны, вес, 160).

Состояние «тяжелая_красная_рулоны» наследует значения атрибутов типа и цвета от состояния «красная_рулоны » , а значения атрибутов марки и поверхности - от состояния «бумага » , но обладает своим локальным значением атрибута веса.

Соседние файлы в папке Гл.6,7,Прилож.,Допол