Шпора-small (Шпоры к первому коллоквиуму), страница 7
Описание файла
Файл "Шпора-small" внутри архива находится в папке "Шпоры к первому коллоквиуму". PDF-файл из архива "Шпоры к первому коллоквиуму", который расположен в категории "". Всё это находится в предмете "искусственный интеллект" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 7 страницы из PDF
Если идентификатор является именем некоторого объектапроблемной среды (например, ящика, который может перемещаться роботом), в списке свойствмогут быть указаны цвет этого ящика, его вес, линейные размеры и т.п.Для задания списка свойств используется функция [plist i pl]. При выполнении обращенияк ней идентификатор I получает список свойств PL = (ind1 val1 … indn valn). Отметим, что отсутствиенекоторого свойства эквивалентно тому, что это свойство присутствует в списке со значением ( ).Функция [put i ind val] позволяет изменить значение указанного свойства IND идентификатора I, афункция [get i ind?] – получить весь список свойств I (если параметр ind не задан), или же узнатьзначение указанного свойства.Логические функцииФункции «отрицание», «конъюнкция», «дизъюнкция» ианалогичны соответствующим лисп-функциям:[not e][and e1 e2 … ek](k≥1)[or e1 e2 … ek](k≥1)(n≥1, ki≥1)[cond (p1 e1,1 e1,2 … e1,k1) … (pn en,1 en,2 … en,kn)]Блочная и связанные с ней функции[prog (v1 v2 … vn) e1 e2 … ek](n≥0, k≥1)Эту функцию называют «блочной», поскольку ее вычисление напоминает выполнение блоков вдругих языках программирования.
Вычисление функции начинается с того, что вводятсялокальные переменные, перечисленные в ее первом аргументе. Если vi – идентификатор (имя),вводится локальная переменная с этим именем и без начального значения. Если же vi – пара (idval), то вводится локальная переменная с именем id и начальным значением val (выражение valпри этом не вычисляется). После этого функция последовательно вычисляет остальные своиаргументы – формы ei, которые принято называть операторами.
Вычислив последний из них,функция с его значением заканчивает работу, уничтожив при этом свои локальные переменные.Вычисленные значения всех операторов (кроме последнего) нигде не запоминаются,поэтому имеет смысл в качестве таких операторов использовать только функции/операторы спобочным эффектом. Некоторые из этих функций перечислены ниже.[set v e]Это аналог оператора присваивания.
Сначала вычисляются оба аргумента, причем значениемаргумента v должно быть имя переменной, существующей в данный момент. Функцияприсваивает этой переменной новое значение – значение аргумента e. Это же значение являетсязначением функции set, но оно, как правило, не используется.[return e]Это оператор выхода из блока. Функция return может использоваться только внутри функции prog,поскольку она завершает вычисление ближайшей объемлющей блочной функции, объявляя еезначением значение своего аргумента e.[go e]Это оператор перехода. Отметим, что если в качестве оператора функции prog указанидентификатор, то он трактуется как метка. Значением аргумента функции go должен бытьидентификатор – одна из меток ближайшей объемлющей блочной функции.
Функция goполностью завершает выполнение того оператора этой блочной функции, в который она входит(на любом уровне), и передает управление на оператор, следующий за этой меткой.В качестве операторов можно использовать составной оператор: [do e1 e2 … ek] ( k≥1),а также операторы цикла (loop, while, until, for). Мы рассмотрим только первый вид операторацикла:[loop x l e1 e2 … ek]При выполнении этого оператора вводится параметр цикла x, локализованный внутри loop, затемx поочередно получает в качестве значения очередной элемент списка L (слева направо), ккоторому применяются операторы e1 e2 … ek.Пример: [set L (1 2 3))][prog ((R ( ))) [loop E .L [set R (.E !.R)] .R]]- описанный блок переворачиваетвходной список (значение переменной L), помещая в конец списка R (в начальный моментпустого) элементы L: сначала первый, затем второй, затем третий.
Результатом работы prog будетзначение переменной R на момент завершения цикла – список (3 2 1).КонстантыКак и в Лиспе, константами в Плэнере называются глобальные перемеенные. Они вводятсятак: [cset c v] – константе с именем C присваивается V.Функции ввода-выводафайл screen открывается на вводВ Плэнере имеется достаточно богатый набор функций ввода-вывода, включающий:функции для работы с файловой системой; функции ввода и вывода символов, текста, строк;функции установки цвета фона и символов, управления курсором и др.Ниже приводится фрагмент программы, использующей некоторые средства ввода-вывода:[open screen get]и его значение присваивается константе a; пусть это выражение – (N O T).константе b присваивается (T O N).файл screen переводится в состояние "активный файл ввода"[cset b [rev :a]]файл с именем ff открывается на вывод[active screen get][open ff put]файл ff переводится в состояние "активный файл вывода"считывается очередное выражение (в данном случае, набираемое на[active ff put]в файл ff "печатается" (записывается) выражение (T O N).[cset a [read]]клавиатуре)[print :b]Специальные функцииВ Плэнере имеется более десятка т.н.
специальных функций, реализующих взаимодействиес операционной средой, интерпретатором (перехват синтаксических ошибок с целью их анализа впрограмме пользователя), а также преобразование типов. Несколько примеров:[catch e1 e2]Функция вычисляет E1 и, если вычисление закончилось успешно, с этим значением заканчиваетсвою работу.
Если же в процессе вычисления возникла ошибка, вычисляется значение второгопараметра.[exit e fn n?]Выход из функции FN со значением E, если параметр n задан, то выход из N+1 динамическивложенных обращений к функции FN.Частный случай – выход на верхний уровень программы: [exit ( ) ( )].[time]Значение функции – время от начала решения задачи.[clock]Дата и астрономическое время.[atl a]Функция преобразует идентификатор A в список составляющих его символов.
Например, [atlPLAN] → (P L A N).Образцы и сопоставителиДля анализа данных в Плэнере наряду с традиционными способами (применение функций дляработы со списками, логических функций, предикатов, блоков) можно использовать:- функцию is, реализующую сопоставление образца с выражением,- сопоставители – особые процедуры (к которым можно обращаться только в образцах),проверяющие те или иные свойства выражения и его соответствие образцу в целом илиотдельному элементу образца.Соответствующие возможности Плэнера мы рассмотрим кратко и в основном на примерах.элементом выражения.- сопоставление неудачно;- сопоставление удачно; X:= 1, Y:= (2 3)- сопоставление неудачно (образец описывает список длиной два).значение переменной X (префикс точка), т.е.
как раз b; поэтомуудачным будет и сопоставление второго элемента образца совторой элемент образца (.X) требует, чтобы рассматривалосьОбразец – выражение, которое используется как шаблон при анализе другого выражения (задаетструктуру и отдельные компоненты этого выражения).Если выражение удовлетворяет требованиям шаблона, то говорят, что оно соответствуетобразцу, если нет, то не соответствует. В первом случае сопоставление образца с выражениемудачно, во втором – неудачно.Обращение к функции is выглядит так:[is pat e], где pat – образец, e – выражение (сопоставление производится с E – значением e).Алгоритм сопоставления в общем случае сложен, он предполагает возвраты.
Важно, что удачноесопоставление может сопровождаться побочными эффектами – переменным, входящим в составобразца могут присваиваться в качестве значений соответствующие фрагменты выражения. Этопозволяет резко сократить запись сложных действий по анализу данных и выделению важных дляработы фрагментов.Примеры (считаем, что используемые переменные описаны вне обращений к is, например, вкаком- то объемлющем блоке):[is (*X .X) (b b)] → T - сопоставление удачно, X (побочный эффект) получает значение bотметим, что при сопоставлении первого элемента образца (*X) спервым элементом выражения (b) переменная X получила значениеb;текущеевторым[is (*X .X) (b (b))] → ( )[is (*X !*Y) (1 2 3)] → T[is (*X *Y) (1 2 3)] → ( )Обращение к сопоставителю внешне выглядит как обращение к функции. Однако: значение невырабатывается, проверяется соответствие выражения/подвыражения образцу/элементуобразца, фактические параметры (аргументы) обычно уточняют вид проверки.Пример: [list n] - сопоставитель, соответствующий списку из N элементов[is [list 2] (a b)] → T- сопоставление удачно;[is [list 2] (a b c)] → ( )- сопоставление неудачно;[is (a <list 2> a) (a b b a)] → T- сопоставление удачно (сегмент b b соответствуетсегментномуобращению к сопоставителю list;[is (a [list 2] a) (a (b b) a)] → T- сопоставление удачно.В Плэнере есть около 30 встроенных сопоставителей, в том числе: логические (типа and и or),типа сond, типа prog (вводят локальные переменные).Сопоставитель [ ] соответствует любому выражению, сопоставитель < > - любому сегменту.Некоторые встроенные сопоставителиСопоставители (без параметров): id (идентификатор), num (число), var.
(обращение к переменнойс префиксом "."), var*, var:, var!., var!*, var!:, atomic (атомарное выражение) – проверяют типвыражения.[aut pat1 … patn] – сопоставитель "ИЛИ"; сопоставление с некоторым выражением успешно, есливыражение соответствует одному из указанных образцов.[et pat1 … patn] – сопоставитель "И"; сопоставление с некоторым выражением успешно, есливыражение соответствует каждому из указанных образцов.[when pat1 pat1,1 pat1,2 … pat1,k1) … (patn patn,1 patn,2 … patn,kn)] – "УСЛОВНЫЙ" сопоставитель; есливыражение соответствует образцу pati, то применяется сопоставитель [et pati,1 pati,2 … pati,ki].[star pat] – сопоставитель соответствует списку, каждый элемент (верхнего уровня) которогосоответствует образцу pat.Определение новых сопоставителей[define <имя> (kappa <список параметров> pat)]Пример:[define pal (kappa ( )[aut ( ) [list 1] [same (X) (*X <pal> .X)]])]- рекурсивный сопоставитель pal соответствует любому списку-палиндрому; в нем использованы:логический сопоставитель aut (аналог or), известный нам сопоставитель list, сопоставитель-блокsame (вводящий локальную переменную X).