Сопоставление с образцом
Сопоставление с образцом (англ. Pattern matching) — метод анализа и обработки структур данных в языках программирования, основанный на выполнении определённых инструкций в зависимости от совпадения исследуемого значения с тем или иным образцом, в качестве которого может использоваться константа, предикат, тип данных или иная поддерживаемая языком конструкция.
Как правило, имеется возможность указать более одного образца и связанного с ним действия.
Сопоставление с образцом часто встречается в функциональных языках программирования, таких как языки семейства ML и Haskell. Императивные языки иногда тоже умеют сопоставлять с образцом. А регулярные выражения для символов, являясь случаем соспоставления с образцом, поддержаны везде.
Содержание
1 Сравнение с точным значением
2 Использование внутренней структуры объекта
3 Алгебраические типы данных
4 Сопоставление со строкой
5 См. также
Сравнение с точным значением |
Простейшим вариантом является сопоставление с константой. В этом случае сопоставление с образцом эквивалентно
условному оператору или конструкции «switch» («case») в императивных языках.
Рассмотрим, для примера, вычисление логического отрицания.
В OCaml:
let neg x =
match x with
| false -> true
| true -> false
;;
Здесь следующие за символом "|" значения являются образцами, а следующие за «->» выражения вычисляются при совпадении аргумента «x» с одним из образцов.
Тот же пример с использованием условного оператора:
let neg x =
if x = false then true
else false
;;
Использование внутренней структуры объекта |
Нахождение суммы списка:
let rec sum l =
match l with
| -> 0
| x :: xs -> x + (sum xs)
;;
В этом примере аргумент функции «sum» сопоставляется со значением «пустой список», либо с образцом «голова :: хвост» (где «::» — оператор добавления элемента в начало списка).
Алгебраические типы данных |
В качестве образца может применяться конструктор типов:
type animal = Dog of string | Cat of string ;;
let say x =
match x with
| Dog (x) -> x ^ "says 'woof'"
| Cat (x) -> x ^ "says 'meow'"
;;
Сопоставление со строкой |
Языки с развитой поддержкой обработки текста, такие как AWK и SNOBOL, поддерживают сопоставление с регулярным выражением.
Пример на AWK, подсчёт количества включений слов «foo» или «bar»:
/foo|bar/ { foobar++ }
END { print foobar }
См. также |
- Rete
Для улучшения этой статьи по информационным технологиям желательно: |
В другом языковом разделе есть более полная статья Pattern matching (англ.) |