В.Н. Пильщиков - Язык Плэнер, страница 16
Описание файла
DJVU-файл из архива "В.Н. Пильщиков - Язык Плэнер", который расположен в категории "". Всё это находится в предмете "искусственный интеллект" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр DJVU-файла онлайн
Распознанный текст из DJVU-файла, 16 - страница
Она вычисляет только второй аргумент — простую форму е, значением которой может быть любое выражение. Данное выражеппе н сопоставляется с обраацом рап Если сопоставление удачно, функция вырабатывает аначеиие Т, неудачно— значение (). 2.2. Простые образцы В атом параграфе описываются правила сопоставления простых образцов всех типов, кроме образцов-сопоставителей, которые будут рассмотрены позже. Образцам-атомам соответствуют только равные им атомы. Поэтому (1Я ПЛЭНЕР ПЛЕНЭР) -г () (1Я 5 (+ 2 3)) -г.
Т Если в качестве образца укааано простое обращение к функции, то вычисляется значение функции, и оно сравнивается с со- 76 поставляемым выражением. В случае равенства сопоставление удачно, иначе — неудачно. Например: [13 [АТЬ СЕЗАМ) (С Е 3 А М)] -ь Т [13 [+ 2 3] 5.0) -~ () Обраацу, являющемуся простым обращением к константе, соответствует только выражение, равное значению константы. Пусть, к примеру, константа Р1 имеет значение 334159, тогда [13:Р1 3.14159] -~ Т [13:Р1 (АЦ -в () Если в качестве образца указана ;переменная и зта переменная имеет аначение, то такому образцу соответствует только выражение, совпадающее с текущим значением переменной.
Например: [ОО [БЕТ Х (А В)] [13 .Х (А В)]] -~ Т [ВО [БЕТ А «20) [13.А 16]) -~ () Во всех рассмотренных выше случаях сопоставление фактически сводилось к проверке па равенство. В следующих же двух случаях сопоставление сводится к дрисваиванию переменным новых значений. Если в качестве образца указана ;переменная и эта переменная в текущий момент ие имеет значения, то данный обрааец соответствует лзобому выражению. Как побочный эффект сопоставления, переменная получает значение, которым становится сопоставляемое с нею выражение.
Например, если переменная Х ие имела значения, то при сопоставлении [13.Х (А +.В)) -~ Т переменной Х будет присвоено значение (А + В). Таким образом, как обрааец .-переменная ведет себя двояко. Если опа имеет .значение, то оно и используется при сопоставлении, а если переменная не имеет аначение, то при сопоставления ей присваивается значение. Довольно часто в процессе сопоставления необходимо присваивать переменным новые значения независимо от того, имели онн ранее значения или нет. В таких случаях следует .обращаться к переменным с префиксом.ее». Как обрааец е-переменная соответствует любому выражению, причем при сопоставлении переменная получает новое значение, которым становится сопоставляемое с нею выражение.
Так,после вычисления [ВО [ЯЕТ Х РЬ/1] [13 еХ (РАЯСА1 АВА)]) -+ Т переменная Х будет иметь значение (РАЯСАЬ АВА). Все рассмотреппые пами случаи сопоставления очень просты, н пх легко реализовать с помощью функций. Поэтому рассмотревные выше образцы обычно используются не самостоятельно, а как компоненты более сложных образцов — образцов-списков. Образцу, являющемуся 1 списком, соответствует только 1 список, элементы которого соответствуют элементам данного образца.
При этом требуется, чтобы существовало соответствие для каждого элемента как образца-списка, так и анализируемого списка. Например, сопоставление [1Я (ОГНИ»Х) (ОГНИ МОСКВЫ)] удачно, поскольку есть соответствие для каждого элемента сопо- ставляемых списков, а сопоставление (1Я (ОГНИ еХ) (ОГНИ НОЧНОЙ МОСКВЫ)] неудачно, так как иет соответствия для третьего элемента апализируемого списка (иапомпим, что простому образцу, в частности еХ, может соответствовать одно выражение, но не сегмент). При описании точных правил сопоставления 1 списков будем различать два случая: когда все элементы образца-списка являются простыми обраацами и когда среди этих элементов есть хотя бы один сегментный образец. В данном параграфе рассматривается только первый случай.
Образец-список, составленный из одних простых образцов, требует, чтобы сопоставляемый с иим список имел ту же длину, что и он сам, и чтобы элементы обоих списков, находящиеся в одинаковых позициях, саответствовалн друг другу. Более точно, сопоставление 1 списков одинаковой длины сводится к последовательному сопоставлению сначала первых элементов списков, затем вторых элементов, затем третьих элементов и т. д. Если все эти сопоставления удачны, то.удачным считается и сопоставление списков в целом; при этом все побочные эффекты, имевшие место при проверке соответствия элементов, сохраняют свою силу и по окончании сопоставления списков..
Но если окажется, что сопоставление какой-то пары элементов неудачно, то сопоставление списков сразу же прекращается; оно считается неудачным, и при атом все побочные эффекты сопоотавления предыдущих элементов уничтожазотся. Таким образом, при сопоставлении переменные образца получазот новые значения только тогда, когда сопоставление образца с выражением удачно в целом, прн неудачном же сопоставлении переменные образца не мепягот сволх значений.
Это — общее правило сопоставления обраацов. Проиллюстрируем сказанное вьппе конкретными примерами. Сначала рассмотрим случаи неудачного сопоставления; [13 (А + .Х) [!)ПОТЕ (А + Ву]] () [13 (»Х — СТОЛИЦА ФИД)КИ) (СУВА — СТОЛИЦА)] — ( ) [1Б (ЯЗЫК АДА) (ЯЗЫК АДЫ)] -«() В первом иа этих примеров неудача сопоставления обусловлена тем, что апалиаируемое выражение пе является списком в круглых скобках, во втором примере — разной длиной сопоставляемых списков, а в третьем примере — несоответствием вторых алементов списков. В следующих примерах, где предполагается, что перемеииая г' имеет аначение 1828, а константа С вЂ” значение ФИДЖИ, все требования к удачному исходу сопоставления выполнеяы: [13 (.У вЂ” [+ У 82]) (1828 — 19Г0)] -«Т [13 (»Х ГОВОРИЛ: «Т) (К.ПРУТКОВ ГОВОРИЛ: ВДИ!) ] -«Т и переменная Х получает зиачеппе К.ПРУТКОВ, а перемеппан г' — аяачение ВДИ! [13 (:С НАСЕЛЯЮТ (»М ТЫСЯЧ)), (ФИД)КИ НАСЕЛЯЮТ (600 ТЫСЯЧ))] -ч- Т, Н:=600 Рассмотрим процесс сопоставления списков в коследием случае.
Оба сопоставляемых списка имеют одинаковую длину, поэтому функция 13 осуществляет последовательное сопоставление их элементов: [13:С ФИДЖИ) -» Т [1Б НАСЕЛЯК)Т НАСЕЛЯЮТ] -«Т [13 (»К ТЫСЯь1) (600 ТЫСЯЧ)] «Т М. 600 (в последнем случае рекурсивно применяется правило сопоставлеиия списков). Поскольку все ати сопоставления удачиы, то удачным является и сопоставление списков в целом. А раз так, то за переменкой К сохраняется эиачеиие 600, полученное ею во время сопоставления третьих алемеятов исходных списков.
Другой пример. Пусть переменная У имеет зяачепие ФУТЛЯР. Тогда сопоставлепие [13 (»Х — .У РОЯЛЯ) (АРФА — СКЕЛЕТ РОЯЛЯ)] неудачно, поэтому переменная Х яе мепяет своего значения. В самом деле, это сопоставление сводится к последовательному выполнению следующих сопоставлений: [13 «Х АРФА] -«Т, Х:=АРФА [13 — — ] -«Т [13 .У СКЕЛЕТ) -«( ) 79 Поскольку обнаружилось несоответствие между третьими элемен. тами списков, сопоставление списков превращается и оно объяв. ляется неудачным.
При атом присвоенное переменной Х значение АРФА уничтожается и восстанавливается прежнее значение переменной, которое она имела до начала сопоставления. Изменение аначений у переменных образца в процессе сопоставления можно рассматривать как условное (временное) присваиванпе значений, которые станут постоянными значениями только в случае удачного исхода всего сопоставления образца с выражением. Однако это не оапачает, что такими временпымн значениями нельзя пользоваться. Пока выподпяется сопоставление, временные значения переменных рассматриваются как текущие значения, которыми можно воспольаоваться, обратившись к паременным с префиксом «л. Такая возможность использована, например, в образце («Х .Х), которому соответствует любой 1 список из двух равных элементов.
Действительно, рассмотрим сопоставление (13 («Х .Х) (Р1РТУ Р(РТУ)) При сопоставлении первых элементов «Х и Р1РТЪ' переменная Х условно получает значение Р1РТУ, которое и испольауется при сопоставлении вторых элементов .Х и Р1РТУ. Так как соло. ставление списков удачно, значение Р1РТ«' сохраняется аа переменной Х и по окончании сопоставленил. Манипулируя префиксами кз и ««», можно построить более сложные примеры того же типа. Предположим, что до начала сопоставления перемепная Х имела значение П тогда имеем (13 (.Х + «Х )( .Х вЂ” «Х / (+ .Х 1) ) (1+ 2)(2 — 3/4)] -«Т, Х:=3 Здесь при сопоставлении первых элементов используется значение переменной Х; равное 1. При сопоставлении третьих элементов переменная Х получает новое значение 2, которое испольауется при сопоставлении пятых влементов.
При сопоставлении же седьмых элементов переменная Х еще раэ меняет свое аначение; им становится число 3, которое используется в функции сложения и которое сохраняется у переменной после сопоставления. 2.3. Сегментные образцы Теперь мы рассмотрим правила сопоставления образцов-списков, среди элементов которых есть сегментные образцы. Сегментные образцы, как уже отмечалось, сопоставляются с последовательностями выражений (сегментами). При этом сопоставление таких образцов регламентируется иравилол дееегл«н га»ии, которое гласит, что сопоставление сегментного образца с сегментом всегда осуществляется так, как если бы выполнялось сопоставление соответству>о>цего простого образца с 1 списком, составленным иэ элементов данного сегмента. Например, сегментныв образец 1:С соответствует сегменту а, а> ...
аь тогда и только тогда, когда простой образец:С соответствует сппску (а> а> ... а>), т. е. когда значение константы равно .этому списку. Таким образом, если в образце-списке встретилось сегментное обращение к константе н ее значением является 1 список из !> элементов, то данный сегментный обрааец требует, чтобы я очередных элементов анализируемого списиа образовывали последовательность, совпадающую с сегментированным аначением константы. Только при этом условии будет существовать соответствие для данного сегментного образца.
Если же в анализируемом списке осталось меньше я влементов или если сегмент иэ очередных л элементов этого списка не равен сегментировапному значению константы, то соответствия данному сегментному образцу нет. Например, прн значении (+ 2 +) у константы С имеем [13 (! 1:С 3) (1+ 2+ 3)) ->- Т [13 (! 1:С 3) (1+ 2)) ->. () [13 (1 !:С 3) (1 — 2 + 3)) -е.
' () Следует по[!черкнуть, что, согласно правилу десегментации, совпадения сегментированного значения константы с сегментом. очередных элементов анализируемого списка недостаточно для удачи сопоставления. Требуется также, чтобы значением константы бын 1 список Если >ко ее значением является атомарное выражение'или список пе в круглых скобках, то сегментному обращению к этой константе не соответствует ни один сегмент.