Сопоставление с образцом




Сопоставление с образцом (англ. 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











Popular posts from this blog

Steve Gadd

Лира (музыкальный инструмент)

Сарыагашский район