Shoda vzorů

Pattern matching je metoda  analýzy a zpracování datových struktur v programovacích jazycích , založená na provádění určitých instrukcí v závislosti na shodě studované hodnoty s jedním nebo druhým vzorkem, který lze použít jako konstantu , predikát , datový typ nebo jiný jazyk podporovaný konstrukt.

Obvykle je možné zadat více než jeden vzor a související akci.

Shoda vzorů se často vyskytuje ve funkčních programovacích jazycích , jako je rodina ML a Haskell , a to i ve formě ochranných výrazů .

Vzory sekvencí (jako je textový řetězec) lze porovnávat s regulárními výrazy .

Porovnání s přesnou hodnotou

Nejjednodušší možností je porovnávat s konstantou. V tomto případě je porovnávání vzorů ekvivalentní podmíněnému příkazu nebo konstrukci "přepínač" ("případ") v imperativních jazycích.

Vezměme si například výpočet logické negace .

V OCaml :

nechť neg x = odpovídá x s | nepravda -> pravda | pravda -> nepravda ;;

Zde následuje symbol "|" hodnoty jsou vzory a výrazy za "->" jsou vyhodnoceny, když argument "x" odpovídá jednomu ze vzorů.

Stejný příklad s použitím podmíněného operátoru :

nechť neg x = if x = false then true else false ;;

Použití vnitřní struktury objektu

Nalezení součtu seznamu:

nechť rec součet l = shodu l s | [] -> 0 | x :: xs -> x + ( součet xs ) ;;

V tomto příkladu je argument funkce "součet" porovnáván s hodnotou "prázdný seznam" nebo se vzorem "head::tail" (kde "::" je operátor pro přidání prvku na začátek seznamu).

Algebraické datové typy

Konstruktor hodnoty typu lze použít jako příklad :

typ zvíře = Pes na provázku | provázková kočka ; _ řekněme x = shodu x s ​​| _ Pes ( x ) -> x ^ "říká 'woof'" | Kočka ( x ) -> x ^ "říká 'mňau'" ;;

Shoda proti řetězci

Jazyky pro zpracování textu jako AWK a SNOBOL podporují párování regulárních výrazů.

Příklad AWK, počítání počtu výskytů slov „foo“ nebo „bar“:

/foo|bar/ { foobar ++ } KONEC { print foobar }