Potrivire de model

Pattern matching este o  metodă de analiză și procesare a structurilor de date în limbaje de programare , bazată pe execuția anumitor instrucțiuni în funcție de potrivirea valorii studiate cu unul sau altul eșantion, care poate fi folosit ca constantă , predicat , tip de date sau alt construct suportat de limbaj.

De obicei, este posibil să se specifice mai mult de un model și acțiunea asociată acestuia.

Potrivirea modelelor apare frecvent în limbaje de programare funcționale, cum ar fi familia ML și Haskell , inclusiv sub formă de expresii de gardă .

Modelele de secvențe (cum ar fi un șir de text) pot fi asociate cu expresii regulate .

Comparație cu valoarea exactă

Cea mai simplă opțiune este să potriviți cu o constantă. În acest caz, potrivirea modelului este echivalentă cu o instrucțiune condiționată sau un construct „comutator” („caz”) în limbaje imperative.

Luați în considerare, de exemplu, calculul negației logice .

În OCaml :

fie neg x = potrivește x cu | fals -> adevărat | adevărat -> fals ;;

Urmează simbolul „|” valorile sunt modele, iar expresiile care urmează după „->” sunt evaluate atunci când argumentul „x” se potrivește cu unul dintre modele.

Același exemplu folosind operatorul condiționat :

fie neg x = daca x = fals atunci adevarat altfel fals ;;

Utilizarea structurii interne a unui obiect

Găsirea sumei unei liste:

fie rec sum l = potrivește l cu | [] -> 0 | x :: xs -> x + ( suma xs ) ;;

În acest exemplu, argumentul funcției „sum” este comparat cu valoarea „listă goală” sau cu modelul „head::tail” (unde „::” este operatorul pentru adăugarea unui element la începutul listei).

Tipuri de date algebrice

Constructorul valorii tip poate fi folosit ca exemplu :

tip animal = Câine de sfoară | pisica de sfoară ;; spunem x = potriviți x cu | Câine ( x ) -> x ^ „spune „woof”” | Pisica ( x ) -> x ^ „spune „miau”” ;;

Potrivire cu șir

Limbile de procesare a textului, cum ar fi AWK și SNOBOL , acceptă potrivirea expresiilor regulate.

Un exemplu AWK, numărând numărul de apariții ale cuvintelor „foo” sau „bar”:

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