Описание тега pattern-matching

Используйте этот тег для вопросов о проверке того, имеет ли структура данных определенную форму или содержит определенные значения в определенных местах. Многие функциональные языки предоставляют конструкции сопоставления с образцом. Большинство вопросов в этом теге также должны иметь тег для языка, на котором вы программируете. НЕ ИСПОЛЬЗУЙТЕ ЭТОТ ТЕГ ДЛЯ ОБЫЧНЫХ ВОПРОСОВ ВЫРАЖЕНИЯ, ИСПОЛЬЗУЙТЕ [регулярное выражение] ВМЕСТО; аналогично, для сопоставления с образцом (подстановки) в POSIX-подобных оболочках используйте [glob].

Что такое сопоставление с образцом?

Сопоставление с образцом означает проверку соответствия структуры данных определенному образцу. Говоря абстрактно, паттерн может быть любым набором значений; однако большинство языков ограничивают шаблоны выражением структурных ограничений, таких как "все списки с как минимум двумя элементами" или "все матрицы 2x2, где элементы в (1,0) и (0,1) равны".

Такие языки, как ML, Haskell, Erlang и Mathematica, имеют базовые языковые конструкции для сопоставления с образцом. Другие языки, такие как Lisp, имеют производные конструкции сопоставления с образцом.

Сопоставление с образцом улучшает язык в двух направлениях: выразительность, поскольку сложные последовательности тестов могут быть написаны кратко, и производительность, поскольку компилятор может (по крайней мере, когда сопоставление с образцом является базовой конструкцией языка) оптимизировать такие конструкции для генерации оптимальное количество тестов (т.е. никогда не проверять дважды одно и то же условие).

Руководство по использованию тегов

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

Сопоставление с образцом обычно точное. Если вы ищете приблизительные шаблоны, например, при анализе изображений или речи, ищите "распознавание", а не "соответствие", например, распознавание образов.