В.Н. Пильщиков - Язык Плэнер (1156455), страница 30
Текст из файла (страница 30)
Эти процедуры имеют обраацы, и выаываются те из иих, образцы которых соответствуют записываемому или вычеркиваемому утверждению. Подробности вызова теорем будут рассмотрены в следующей главе. Операция поиска по образцу используется для аналиаа содержимого базы дакиых: задается иекоторый образец, и находится то утверждение, которое ему соответствует. При сопоставлеиии образца с иайдеивым утверждевием перемекиые образца получа.ют соответствующие зиачеиия, что дает возможвость определить, .какое именио утверждение было вайдено. Все эти операции-выполияются в режиме возвратов.
Если некоторое утверждение было записало в базу данных, яо затем в программе возиик неуспех, то это утверждение будет удалена иэ базы данных. Аналогично ранее вычеркнутое. утверждение будет при неуспехе восстановлено в базе данных. Поиск же по образцу — вто развилка в программе, так как обращу может соответствовать несколько утверждевий базы данных. При поиске <качала находится только одно иэ 'иих, ио если в дальнейшем в программе возникнет веуспех, то поиск возобновится и будет найдено следующее подходящее утверждеиие. Каждая из этих основных операций имеет иесколько модификаций. Например, возможны такие ивменекия базы данных, Которые ве отменяются при неуспехе,или зоаможеи такой поиск по образцу, который ке воаобиовляется при неуспехе.
В плэкерских программах базу данных можно использовать просто как хранилище, в которое можне записывать какую-то мвформацию, удерживать ее там сколь угодно долго, определять, что там сейчас иаходится, и т..д, Одиако база данных введена в язык с иной целью. Как уже сказано, ока предкаакачеиа для описания тей обстановки, в которой решается аадача, предложенная польаователем. Например, программа, пламирующая действия робота, должиа иметь описание (модель) той среды, в которой 'действует робот, только тогда ока может что-то плакирох вать. Вот такая модель и представляется в виде базы . дакных.
Как правило, описание любой ситуации можно представить в виде совокупности простых фактов. Например, ситуацию, изображенную иа рис. Б, можно описать с помощью следующих фактов: К1 — это комната, Вй — это комиата, Р— это дверь, П сое- диняет К1 и К2, робот находится в К1, А — зто ящик, А нахо дится в К2. Если удалось так представить ситуацию, то кая|дый факт описывается в виде одного утверждения. База же данных, как совокупность этих утверждений, будет описывать ситуацию в целом.
Каким образом можно описывать факты в виде утверждений? Никаних ограничений на этот счет в языке иет; едипственное требование". утверждения должны быть 1 списками, Для языка утверждение — это просто список. Формат же записи фактов, их интерпретацию определяет сам пользователь. Например, Рис. 5. факт «В является пирамидой красного цэетаэ можно описать в виде утверждения (Рх'КАМ1В В 1Б КЕВ) или в виде утверждения (СОЬОЮК ОР (РУКАМ10 В) 15 КЕВ), а можно описать и в виде двух утверждений (РУКАМ(О В) и (СО1 ОНК В КЕВ). Иа всех атих форм ааписи фактов обычно испольауется предикатная форма: (Р а| аз ... а|) где Р— имя отношения, описываемого фантом, а а| — названия объектов, связанных 'этим отношением.
В такой форме одноместные отношения (свойства) описываются как (КООМ К1) илн (1НТЕОЕК 5), двухместные — как (АТ КОВОТ К1) или (Е|) Х 5), трехместные — как (СОХНЕСТЯ 0 К1 К2) или (ВЕТЪ7ЕЕН А В С) и т. д. Такого формата мы и будем придерживаться в дальнейшем. Например, используя его, ситуацию, изображенную ва рис. 5, можно описать в виде следующего набора утверждений: (КОСМ К1), (КООМ К2), (ВООК О), (ВОХ А), (СОН11ЕСТЗ В К1 К2), (АТ КОВОТ К1), (АТ А К2) Как уже было сказано, с утверждениями бааы данных могут быть связаны списки свойств. В этих списках обычно указывается информация о самих утверждениях или о тех фактах, что ими 10 в, н, плльщзаов 145 описыва»отея.
Например, можно ввести некоторое свойство и увеличивать его (числовое) значение на единицу каждый раз, когда программа использует утверждение; в конце выполнения программы по этому свойству можно будет узнать, какие утверждения искользозалпсь наиболее часто. Или, например, с утверждением (ВОХ А), означающим, что А является ящиком, можно связать список свойств, указав в нем дополнительную информацию о предмете А: что он, скажем, красного цвета, имеет форму куба и т. п.
. Итак, база данных обычно используется как модель того мира, в котором программа должна ре<пать задачи. При такой интерпретации базы данных операции над ией можно трактовать следующим образом. Изменениями базы данных имитируются изменения в этом мире.
Например, переход робота нз комнаты В1 в коз»нату В2 имитируется вычеркиванием утверждения (ЛТ ВОВОТ В1) и записью утверждения (ЛТ ВОВОТ В2). Поиск же по образцу можно понимать как проверку истинности каких-либо высказываний или как выявление объектов, находящихся в определенных отношениях. Например, ' поиск по образцу (АТ ВОВОТ В1) — это проверка, действительно ли робот находится в комнате В1, а поиск по образцу (АТ «Х В2) — это нахождение объекта, расположенного в комнате В2: при сопоставлении данного образца с утверждением (АТ А В2) переменная Х получает значение А, что и является ответом. В следующих параграфах описаны встроенные функции языка, предназначенные для работы с базой данных.
4.2. Запись утверждений Основной функцией, используемой для ваписи новых утверждений в базу данных, является Функция АЯЯЕВТ: (АЯЯЕВТ аз»1 юпЬЗ гес7 сйеу), РЯНВВ. Значением аргумента аз»1 должен быть 1 список, который как утверждение будет ааписаи в базу данных. Аргумент мнд обязан иметь вид (%1ТН »пб< и<»иб» э»....
»и«» иь), й >~ 1, где <и»(< и и,— простые формы; значениями 1л<(з должны быть идентификаторы 1Л<1»», а и» могут иметь произвольные значения У<. Вычясяевие этого аргумента дает список свойств (1Л<0»вЂ” названия свойств, У< — их значения), который будет связан с записываемым утверждением, Если при обращенни к функции АЯЯЕВТ аргумент вил не задан, то утверждение не будет иметь 146 списка свойств, или, другими словами, с ннм будет связан пустой список свойств. Аргумент тес иавывается рекомендацией и указывает, какие ваписывающие теоремы должны быть вывваны.
Использование реиомендаций будет объяснено в главе б. Аргумент е(ае должен иметь вид (ЕЕБЕ е?), где е — простая форма. Он определяет действия функции АБЯЕКТ в том случае, когда ей не удается ааписать утверждение в базу данных. Отсутствие аргумента е1ве вквивалентно ааданию аргумента (БЕБЕ ()), а аргумент (Е( ЯЕ) рассматривается как сокращенне от (ЕЕБЕ [РА1Ц). Функция АБЯЕКТ действует следующим обрааом. Сначала она вычисляет аргумент аагс и, если он есть, аргумент ммЬ, а ватам просматривает баву данных, чтобы определить, не написано ли там такое же утверждение. Если аапнсапо (при любом списке свойств), тогда функция ничего не добавляет в базу данных и вычисляет лишь форму е ие аргумента еПе. По если утверждения в баве данных еще не было, то опо еапясывается туда и с ним свяаывается список свойств, полученный иа аргумента мМЬ.
Одновременно вапоминается обратный оператор, назначение которого — отменить при неуспехе ету вались в базу данных. При' отсутствии рекомендации тес функция АБЯЕКТ иа этом и ваканчивает свою работу; ее аначение — записанное утверждение. Если .же аргумент тес задан, то осуществляется вызов ааписывающих теорем: вычисляется выражение [ОКАЧ1 а тес), где я — только что ааписанное утверждение (см.
$5.3). Рассмотрим несколько примеров. Предположим, что переменная Х имеет значение В. Тогда й результате вычисления [АЯЯЕКТ (ЯПВЯЕТ А .Х)) в базу данных будет записано утверждение (ЯПВБЕТ А В), с которым свяаывается пустой список свовств. Значение функции — список (БПВБЕТ А В). Однако, если такое утверждение уже имелось в басе данных, то повторно оно не записывается; в данном случае функция АЯЯЕВТ просто вырабатывает аначение ().
'Пусть переменная АБ имеет аначение (ВОХ А), а переменная У вЂ” вначеиие КЕП. Тогда при вычислении [АЯБЕКТ .АЯ ()т'1ТН СО(ОПК,Т РОКМ 'СУВЕ) (Е1 ЯЕ)] в баау данных будет ааписано утверждение (ВОХ А), с которым будет свяаано два свойства: одно — с навванием СОЕОПК и аначением КЕП, а другое — с названием РОЕМ и вначением СОВЕ. 10" 147 Если же такое утверждение уже имелось в базе данных, то запись не производится, а вырабатывается неуспех (согласно аргументу (Е(ЯЕ)). Действие функции АБЯЕНТ отменяется при неуспехе. Если ото нежелательно, то следует использовать «двойникз этой функции,которым является Функция РАЯЯЕКТ: [РАББЕНТ азгг юпь) гее) еЬе?], РЯВВН.