Введение

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

В информатике сопоставление с образцом — это проверка заданной последовательности токенов на наличие составляющих некоторого образца. В отличие от распознавания образов, сопоставление обычно должно быть точным: "либо есть совпадение, либо его нет". Образцы обычно имеют форму последовательностей или древовидных структур. Области применения сопоставления с образцом включают вывод местоположений (при наличии) образца в последовательности токенов, вывод отдельных компонентов сопоставленного образца и замену сопоставленного образца другой последовательностью токенов (то есть поиск и замена). Последовательные образцы (например, текстовая строка) часто описываются с помощью регулярных выражений и сопоставляются с использованием таких методов, как возврат. Древовидные образцы используются в некоторых языках программирования как универсальный инструмент для обработки данных на основе их структуры, например, C#, F#, Haskell, ML, Python, Ruby, Rust, Scala, Swift и язык символьных вычислений Mathematica имеют специальный синтаксис для выражения древовидных образцов и языковую конструкцию для условного выполнения и извлечения значений на их основе. Часто можно задавать альтернативные образцы, которые перебираются последовательно, что обеспечивает мощную конструкцию условного программирования. Сопоставление с образцом иногда включает поддержку охранных условий.

История

Ранние языки программирования с конструкциями сопоставления с образцом включают COMIT (1957), SNOBOL (1962), Refal (1968) с сопоставлением с образцом на основе деревьев, Prolog (1972), St Andrews Static Language (SASL) (1976), NPL (1977) и Kent Recursive Calculator (KRC) (1981). Многие текстовые редакторы поддерживают сопоставление с образцом различных видов: редактор QED поддерживает поиск по регулярным выражениям, а некоторые версии TECO поддерживают оператор OR при поиске. Компьютерные алгебраические системы обычно поддерживают сопоставление с образцом для алгебраических выражений.

Сопоставление шаблонов и струн

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

СНОБОЛ

SNOBOL (StriNg Oriented and symBOlic Language) — это язык программирования, разработанный в 1962–1967 годах в лабораториях AT&T Bell Дэвидом Дж. Фарбером, Ральфом Э. Грисуолдом и Иваном П. Полонским. SNOBOL4 выделяется среди большинства языков программирования тем, что рассматривает шаблоны как полноценный тип данных (то есть тип данных, значениями которого можно оперировать всеми способами, допустимыми для любого другого типа данных в языке программирования) и предоставляет операторы для конкатенации и чередования шаблонов. Строки, генерируемые в процессе выполнения, могут рассматриваться как программы и выполняться. SNOBOL широко преподавался в крупных университетах США в конце 1960-х и начале 1970-х годов и широко использовался в 1970-х и 1980-х годах как язык для обработки текста в гуманитарных науках. После создания SNOBOL более новые языки, такие как Awk и Perl, сделали популярным манипулирование строками с помощью регулярных выражений. Однако шаблоны SNOBOL4 охватывают грамматики BNF, которые эквивалентны контекстно-свободным грамматикам и более мощны, чем регулярные выражения.