В.Н. Пильщиков - Язык Плэнер (1156455), страница 29
Текст из файла (страница 29)
Если >ке найдено условие еь вычисление которого успешно„ тогда функция 1Р уничтожает все Р-точкн (яо не обратные операторы) внутри этого условия и свою Р-точку и ватем последовательно вычисляет оставшиеся выражения этой 1-й клаузы. В случае их успешного вычисления успешно и вычисление всего. условного выражения, причем его значением объявляется значение последнего выражения из Ьй клаузы. В противном случае вычисление функции 1Р неуспешно, поскольку ее Р-точки уже нет и, следовательно, выработанный при вычислении выражений клаузы неуспех вернет программу к развилке, определенной до иачнла вычислепил функции 1Р. (Подчеркнем, что если найдено успешное условна,' то оставшиеся клауаы никогда не рассматриваются.) Примеры: [1Р ([РА1Ц А) ([РА1Ц В)] — () [1Р ([РА1Ц А) (() В)] — ~- В [1Р (А)] -~- А [1Р (Т [РА1Ь]) (Т В)] — неуспех [1Р ([АЬТ Т [РАЬЬ 1]] [РА1Ь 2])] — неуспех с сообщением 2 Еще один пример.
При вычислении выражения [1Р ( [ЯТТМ (3 8) 205] [ОО А] ) ] будет осуществлен переход по метке А, если из чисел 3 и 8 можно составить вумму 205. В противном случае функция 1Р вы;рабатывает значение (). Следующая функция Р11)П испольауется в тех случаях, когда требуется найти определенное число вариантов успешного вычис- 137 кения какого-то выражения или некоторой последовательности выражений. Например, может потребоваться найти три таких решения задачи о восьми ферзях, в которых один из фераей расположен на 2-й гориаонталл л б-й вертикали. Это, конечно, можно сделать и с помощью ранее рассмотрейиых функций, но применение функции И1)В оказывается более удобна(ьь Функция Р1ХВ относится к классу РВОВ.
Обращение к ней выглядит так: (Иг(В тоде (и, из ... и,) р е, ез ° .. еь), где т ) О, й ) 1. Иг( — блочная функция: список (и, иа ... и ) является описанием ее локальных переменных, а последовательиость е1 ез ... е, обрааует ее тело. Аргументы тоде и р должны.
быть простыми формами. Вычисляется функция следующим образом. Сначала вычисляется аргумент тоде. Его значением должен быть список вида (д т1и тах), где о, т1и, тах — неотрицательные целые числа или атом АЬЬ. Если число а равно нулю, тогда функция Р11)В сразу аавершает свою работу со значением ('). Иначе вводятся локальные переменные а~ (точно так же, как и в функции РКОС) и еще две вспомогательные переменные и и со1 с начальными аначениями О и () соответственно. После' этого вычисляется тело блока.
Если ато вычисление успешно доапло до конца тела (успешно вычислился последний оператор еь), то и увеличивается на 1, вычисляется аргумент р, и его значение заносится в начало списка со1. Затем функция' Р(ЫВ вырабатывает неуспех, возобновляя тем самым вычисление своего тела; ищется новый вариант его успешного вычисления. Если такой вариант нашелся (вычисление снова дошло до конца тела), -тогда и вновь увеличивается на 1, заново вычисляется агрумент р, и его новое значение добавляется к списку со1.
После. етого опять вырабатывается неуспех и т. д. Функция Р1ХВ пытается найти о вариантов успешного вычисления своего тела. Если стольких вариантов нет, количество найденных вариантов (и) должно удовлетворять условию т1и ( и ( тах. В ЛЮбом из этих случаев функция успешно заканчивает свою работу, объявляя своим аначением список со1, н котором собраны значения аргумента р, вычисленные при каждом варианте. Но если д вариантов ие найдено нли если и меньше еми мли больше тах, то вычисление функции неуспешно. С выра4отанным при атом неуспехом связывается как сообщение последнее значение переменной со1.
После того как функция Р11)В вычислила аргумент тоде (счлтаем, что а чьО), еа действие полностью еквивалентно вычис.лепию следующего блока: х38 [БРВОО (щ е» г (в О) (со1 ( ))) [АВТ () [СОХО ([ОЕ т т«а] [ВЕТВВХ .со1]) (Т [РАН .со)])]] е« е» ... е» [РАВВ1 в] [РЯЕТ со) (р Всо1)] [СОХО ([ЕО. 7] [ВЕТВВХ.-)]) ([ОТ .и тах] [РА1БЕХ .со1 ЯРВОО]) (Т [РАН])]] Отметим, что независимо от того, успешно или нет аакончилось вычисление функции Р1ХВ, все Р-точки, появившиеся после вычисления аргумента тоде, уничтожаются; Р-точки же внутри тоде сохраняются. Атом АЫ для д, т«в и в»ах играет роль бесконечности.
Например, значение (АЬЬ. 3 7) аргумента тоде оаначает, что надо найти все (сколько есть) варианты успешного вычисления тела функции Р1ХВ, и таких вариантов должно быть не меньше трех и не больше семи, иначе вычисление функции будет неуспешным. Значение же (5 2 АЬВ) оэначает, что должно быть найдено пять вариантов; если есть еще варианты, то они уже не рассматриваются, а если пяти вариантов нет, тогда требуется, чтобы существовало хотя бы два варианта.. Для наиболее часто, встречающихся аначений аргумента тоде — для значений (д д д) и (А1Л 0 АЬЬ) — допускается сокращенная форма: 7 и АЬЬ соответственно. Эти эначения интер' претируются так: «найти ровно д вариантов» (не больше и не меньше) и «найти' все варианты» (сколько есть).
Например, аначением выражения [Р1ХВ АУЛ (Х):Х [БЕТ Х [АМОХО (1 — 2 3 4 — 5)]] [СОХВ ([1Т .Х О] [РА1Ц)]] является список (4 3 1). Здесь, когда число Х отрицательно, вычисление не доходит до конца тела функции Р1ХВ, поэтому такие числа не запоминаются. Неотрицательные же числа учитываются все, как того и требует аргумент АЫ . Другой пример: [Р1ХВ 3 (Х),Х [ВХРАВБЕ [Е«] [2 [БЕТ Х [Ф8]]] 6]]! ((2 6 8 3 1 4 7 5) (2 6 1 7 4 8 3 5) (1 6 8 3 7 4 2 5)) Здесь функция Р)ХВ находи] три решения задачи'о восьми ферзях иа числа тех решений, в которых один иэ ферзей расположен на 2-й гориаонтали и 6-й вертикали.
139 3.9. Некоторые уточнения В связи с использованием в языке режима возвратов требуют уточнения некоторые аспекты вычисления плэнерских программ и сопоставления обраацов. Программа на пленере, как известно, представляет собой последовательность выражений, которые вычисляются друг за другом. Вычисление любого нз.них может быть успешным или неуспешным, причем в первом случае внутри выражения могут остаться развилки и обратные операторы.
Сохраняются лн эти развилки.и обратные операторы? Осуществляется ли возврат по , неуспеху к предыдущему выражению программы, если вычисление очередного выражения оказалось неуспешным? - Ответы на оба вопроса отрицательные. Дело в том, что выражения верхнего уровня программы вычислиются, с точки арения режима возвратов, независимо друт от друга, и вернуться к ранее вычисленному выраженизо нельзя. А раз так, то нет смысла сохранять развилки и обратные операторы внутри выражения, вычисление которого закончено. Таким образом, если мекоторое выражение программы успешно, то по окончании его вычисления все оставшиеся внутри него раввилки и обратные операторы уничтожаются, а если выражение неуспешно, то распространение появившегося прн этом неуспеха блокируется, после чего вместо результата вычисления печатаются слово =НЕУСПЕХ= и сообщение, связанное с этим неуспехом.
В любом случае далеевычисляется следующее выражение программы. Например, вычисление программы ]СВЕТ Р1 ЗЛ4159] ]АМОХС (А В С)] [РА1Ь 7] происходит таким.образом. Вычисляется первое выражение: вводится константа Р1 и ей ирисваивается вначеиие ЗЛ4159; зто "число .печатается как результат вычисления данного выражения; обратный оператор, который запоминался при этом, уничтожается. Затем вычисляется второе выражение, и его аиачение — атом А— выводится на печать; Р-точка функции АМОНО уничтожается. При вычислении третьего выражения программы вырабатывается неуспех, с которым свяаывается сообщение 7; этот неуспех блокируется, т.
е. он не вызывает никакого возврата программы назад, н печатаются слово =НЕУСПЕХ= и атом 7. Теперь рассмотрим, как связаны между собой режим возвратов и механизм сопоставлений. Прежде всего отметим, что, несмотря на внешнее сходство, выбор подходящих сегментов для сегментных образцов и неудачи 140 получает значение ()и попутно запоминается обратный оператор [БЕТ Х А]. Далее вычисляется функция АЬШ: значение переменной У увеличивается на 1 и аапоминается обратный оператор [ЯЕТ У 6], после чего значение функции — число,7 — сравнивается с первым элементом анализируемого списка.
Они не равны, поэтому происходит возврат к образцу )еХ и изменяется сопоставляемый с ним сегмент. При этом возврате выполняются все .обратные операторы, появившиеся после того, как для данного сегментного образца был выбран пустой сегмент. Следовательно, у переменной г' будет 'восстановлено аначение 6, а у переменкой Х вЂ” значение А. Теперь' образцу (еХ ставится в соответствие сегмент из одного элемента 4; переменная Х получает значение (4), и вновь вапомииается обратный оператор [БЕТ Х А]. Далее вновь вычисляется функция АППП переменной У присваивается значение 7 и запоминается обратный оператор [БЕТ г 6]. На этот раэ значение функции разно очередному элементу (числу 7) анализируемого списка, поэтому сопоставление списков удачно завершается. Таким образом, функция )Я заканчивает свою работу со значением Т; появившиеся нри ее вычислении обратные операторы [ЯЕТ Х А] и [ЯЕТ У 6] сохраняются.
Если затем в программе будет выработан неуспех, то при его распространении эти обратные операторы восстановят начальные эиаченик переменных Х. и У, т. е. значения А и 6. Итак, побочные аффекты сопоставления уничтожаются только благодаря выполнению обратных операторов, появившихся во время сопоставления. Поэтому если обратный оператор не запоминался, то не будет и отмены соответствующего побочного аффекта, Например, сопоставление [!Я [ЕТ еХ [ВЕ [РВЕТ У .Х]] [НПМ]] А] неудачно, однако значение А„ полученное переменном Т в процессе сопоставления, сохранится.
ГЛАВА 4 БАЗА ДАННЫХ 4.(. Основные понятия Многие системы искусственного интеллекта, получив на входе описание некоторой задачи, должны найти ее решение. Например, системе может быть предложен набор аксиом и правил вывода, а она должна найти докааательство некоторой теоремы. Или, скажем, системе может быть предложено сформировать план действий робота для достижения поставленной цели в ааданпой обстановке. В связи с зтим в языке программирования, предназначенном для реализации подобных систем, должны быть предусмотрены удобные средства для описания всех компонентов аадачи (исходной ситуации, допустимых правил решения, цели), и для реализации процедур поиска решения задач. Язык пленер учитывает зти требования и предоставляет своим пользователям соответствующие средства.
К ним, в частности, относится база даи ныл, преднааначенная для описания исходной ситуации и тех ситуаций, которые возникают при поиске решения рассматриваемой задачи. Бааой данных в пленере называется набор утверждений. Утверждением может быть любой список в круглых скобках; список называется утверждением, если ои включен в базу данных. С важдыы утверждением может быть свяаан список свойств, Между утверждениями базы данных не устанавливается никаких отношений, в частности не определено понятие места (адреса, индекса) утверждения в базе данных. Доступ к утверждениям осуществляется только по ассоциативному принципу — по описанию признаков искомых утверждений.
В каждой плзнерской программе используется своя база данных, которая в начале выполнения программы пуста (поэтому заполнять ее обязана сама программа), а по окончании выполнения программы уничтожается*). «) Таким образом, плзнерскую баау данных не следует рассматривать как совокупность данных, хранимых во внешней памяти ЭВМ и доступных из разных программ, что обычно подразумевается в программировании под термином «бава данныхю, 143 Для работы с базой данных используются следующие операции: запись новых утверждений в базу данвых, вычеркивание утверждений из базы данных, поиск утверждений по,обраацу.' Выполнение операций ааписи и вычеркивания, иаменяющих содержимое базы даииых, может сопровождаться вызовом особых процедур — так называемых ааписывающих и вычеркивающих теорем, назначение которых — контролировать 'измеиения базы данных.