A mintaillesztés a programozási nyelvek adatstruktúráinak elemzésére és feldolgozására szolgáló módszer, amely bizonyos utasítások végrehajtásán alapul attól függően, hogy a vizsgált érték egyezik-e egy vagy másik mintával, amely konstansként , predikátumként , adattípusként , ill . más nyelv által támogatott konstrukció.
Általában egynél több mintát és a hozzá tartozó műveletet is meg lehet adni.
A mintaillesztés gyakran előfordul olyan funkcionális programozási nyelvekben , mint az ML család és a Haskell , beleértve az őrző kifejezéseket is .
A sorozatok mintái (például egy szöveges karakterlánc) összevethetők a reguláris kifejezésekkel .
A legegyszerűbb megoldás egy konstanssal való egyeztetés. Ebben az esetben a mintaillesztés ekvivalens egy feltételes utasítással vagy egy "switch" ("eset") konstrukcióval a kötelező nyelveken.
Tekintsük például a logikai negáció kiszámítását .
Az OCaml -ben :
legyen neg x = egyeztesse x -et | -vel hamis -> igaz | igaz -> hamis ;;Itt a "|" szimbólum után az értékek minták, és a "->" utáni kifejezések akkor kerülnek kiértékelésre, ha az "x" argumentum egyezik az egyik mintával.
Ugyanez a példa a feltételes operátor használatával :
legyen neg x = ha x = hamis , akkor igaz egyébként hamis ;;Egy lista összegének megkeresése:
legyen rec sum l = párosítsa l -t | [] -> 0 | x :: xs -> x + ( xs összeg ) ;;Ebben a példában az "összeg" függvény argumentuma az "üres lista" értékkel vagy a "head::tail" mintával van párosítva (ahol a "::" az elemnek a lista elejéhez adásának operátora).
A típusérték konstruktor használható példaként :
típusú állat = Dog of string | macska madzag ;; _ mondjuk x = egyeztesse x -et | -vel Kutya ( x ) -> x ^ "jajj" | Macska ( x ) -> x ^ "miau" ;;A szövegfeldolgozó nyelvek, mint például az AWK és a SNOBOL , támogatják a reguláris kifejezések egyeztetését.
Egy AWK-példa, amely megszámolja a "foo" vagy a "bar" szavak előfordulásának számát:
/foo|bar/ { foobar ++ } VÉGE { print foobar }Húrok | |
---|---|
Karakterlánc hasonlósági mértékek | |
Substring keresés | |
palindromák | |
Sorozat-igazítás | |
Utótag szerkezetek | |
Egyéb |