Mintaillesztés

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 .

Összehasonlítás a pontos értékkel

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 objektum belső szerkezetének használata

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).

Algebrai adattípusok

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" ;;

Match with string

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 }