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 .
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 ;;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).
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'" ;;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 }Struny | |
---|---|
Míry podobnosti řetězců | |
Hledání podřetězců | |
palindromy | |
Sekvenční zarovnání | |
Struktury přípon | |
jiný |