Notice: Unexpected clearActionName after getActionName already called in /var/www/html/includes/context/RequestContext.php on line 338
Pattern Matching – Wikipedia Zum Inhalt springen

Pattern Matching

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von Mustervergleich)

Pattern Matching (englisch für Musterabgleich) oder musterbasierte Suche ist ein Begriff für symbolverarbeitende Verfahren, die anhand eines vorgegebenen Musters diskrete Strukturen oder Teilmengen einer diskreten Struktur identifizieren.

Das Pattern Matching ist beispielsweise eine Methode der phylogenetischen Analyse in der Bioinformatik.

Grundlagen

Eine diskrete Struktur besteht aus diskreten Elementen (Symbolen) und Beziehungen zwischen diesen. Beispiele sind Zeichenketten, aber auch Bäume oder Graphen. Das Suchmuster selbst ist ebenfalls eine diskrete Struktur, die aber durch Verwendung zusätzlicher Metazeichen eine ganze Klasse von Strukturen beschreiben kann. Im Gegensatz zur Mustererkennung, die kontinuierliche Strukturen interpretiert, operiert das Pattern Matching von vornherein auf einer symbolischen Repräsentation.

Das Pattern Matching spielt jedoch nicht nur bei der Suche, sondern auch bei der muster- und regelbasierten Transformation diskreter Strukturen eine zentrale Rolle. In Ersetzungs- oder Transformationssystemen bildet das Pattern Matching den ersten Schritt. Dabei werden Teile des Musters mit Teilen der analysierten Struktur identifiziert. Die gefundenen Teil-Strukturen gehen dann als Parameter in die Transformationsfunktion ein. Beispiele für solche Transformationen sind Textersetzung in Zeichenketten und Graphersetzungssysteme.

Anwendungsgebiete

Programmierung

In einigen funktionalen oder logischen Programmiersprachen wird Pattern Matching genutzt, um Daten anhand ihrer Struktur zu verarbeiten (z. B.: Scala, Objective CAML, ML, Haskell, Erlang, Opal, Python).

Beispiel Fallunterscheidung: Eine mögliche Definition der n-ten Fibonaccizahl ist:

<math>\text{fib}(n) = \begin{cases}0 &\text{wenn }n=0\\ 1 &\text{wenn }n=1\\ \text{fib}(n-1) + \text{fib}(n-2) &\text{sonst}\end{cases}</math>

Diese Definition kann so mithilfe von Pattern Matching direkt nach Haskell übertragen werden.

<syntaxhighlight lang="haskell"> -- Matcht die ersten beiden Fälle fib 0 = 0 fib 1 = 1 -- Alle anderen Zahlen n sind definiert als fib n = fib(n-1) + fib(n-2) </syntaxhighlight>

Beispiel: In Haskell werden die Argumente in einer Funktionsdefinition mit Pattern gematcht. Ein Pattern kann, muss aber nicht, wie im vorherigen Beispiel, ein elementarer Wert (zum Beispiel 0) sein, sondern kann auch einen Daten-Konstruktor beschreiben.

<syntaxhighlight lang="haskell"> -- matcht die leere Liste (Konstruktor []) f [] = ... -- matcht alle Listen der Länge > 0 (Konstruktor :), wobei x den Kopf und xs den Listenrest enthält f (x:xs) = ... </syntaxhighlight>

Das äquivalente Beispiel in der Syntax von Python (ab Version 3.10):<ref>{{#if:|{{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}| |}}}}{{#if:Daniel F. Moisset|Daniel F. Moisset: }}{{#if:|{{#if:PEP 636 – Structural Pattern Matching: Tutorial|[{{#invoke:Vorlage:Internetquelle|archivURL|1={{#invoke:URLutil|getNormalized|1={{{archiv-url}}}}}}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=PEP 636 – Structural Pattern Matching: Tutorial}}]{{#if:| ({{{format}}})}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}|{{#if:https://peps.python.org/pep-0636/%7C{{#if:{{#invoke:TemplUtl%7Cfaculty%7C}}%7C{{#invoke:Vorlage:Internetquelle%7CTitelFormat%7Ctitel={{#invoke:WLink%7CgetEscapedTitle%7C1=PEP 636 – Structural Pattern Matching: Tutorial}}}}|[{{#invoke:URLutil|getNormalized|1=https://peps.python.org/pep-0636/}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1=PEP 636 – Structural Pattern Matching: Tutorial}}}}]}}{{#if:| ({{{format}}}{{#if:python.org2020-09-12{{#if: 2022-06-28 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}

          | )
          | {{#if:{{#ifeq:en|de||{{#if:en|1}}}}| ; 
              | )}}}}}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}}}{{#if:https://peps.python.org/pep-0636/%7C{{#if:{{#invoke:URLutil%7CisResourceURL%7C1=https://peps.python.org/pep-0636/}}%7C%7C}}}}{{#if:PEP 636 – Structural Pattern Matching: Tutorial|{{#if:{{#invoke:WLink|isValidLinktext|1=PEP 636 – Structural Pattern Matching: Tutorial|lines=0}}||}}}}{{#if: python.org| In: {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=python.org}}}}{{#if: | {{{hrsg}}}{{#if: 2020-09-12|,|{{#if: 2022-06-28 | {{#if:{{#invoke:TemplUtl|faculty|}}|;|,}}}}}}}}{{#if: 2020-09-12| {{#if:{{#invoke:DateTime|format|2020-09-12|noerror=1}}
            |{{#invoke:DateTime|format|2020-09-12|T._Monat JJJJ}}
            |{{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, datum=2020-09-12|class=Zitationswartung}} }}{{#if: |,|{{#if: 2022-06-28 | {{#if:{{#invoke:TemplUtl|faculty|}}|;|,}}}}}}}}{{#if: | S. {{{seiten}}}{{#if: |,|{{#if: 2022-06-28 | {{#if:{{#invoke:TemplUtl|faculty|}}|;|,}}}}}}}}{{#if: {{#invoke:TemplUtl|faculty|}}| {{#if:2020-09-12|{{#if:|archiviert|ehemals}}|{{#if:|Archiviert|Ehemals}}}} {{#if:|vom|im}} Vorlage:Referrer{{#if:{{#invoke:TemplUtl|faculty|}}| (nicht mehr online verfügbar)}}{{#if: | am {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}|{{{archiv-datum}}}{{#if:239937||(?)}}}}}}{{#if: 2022-06-28|;}}}}{{#if: 2022-06-28| {{#if:2020-09-12{{#invoke:TemplUtl|faculty|}}|abgerufen|Abgerufen}} {{#switch: {{#invoke:Str|len| {{#invoke:DateTime|format| 2022-06-28 |ISO|noerror=1}} }}
       |4=im Jahr
       |7=im
       |10=am
       |#default={{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, abruf=2022-06-28|class=Zitationswartung}} }} {{#invoke:DateTime|format|2022-06-28|T._Monat JJJJ}}
    | {{#invoke:TemplUtl|failure|1=Vorlage:Internetquelle | abruf=2026-MM-TT ist Pflichtparameter}} }}{{#if:{{#ifeq:en|de||{{#if:en|1}}}}|{{#if:python.org2020-09-12{{#if: 2022-06-28 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
       |  (
       | {{#if: | |  (}}
       }}{{#ifeq:{{#if:en|en|de}}|de||
          {{#invoke:Multilingual|format|en|slang=!|split=[%s,]+|shift=m|separator=, }}}}{{#if: |{{#ifeq:{{#if:en|en|de}}|de||, }}{{{kommentar}}}}})}}{{#if: 2020-09-12{{#if: 2022-06-28 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}} }}en|{{#if: |: {{
 #if: 
 | {{
     #ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
     | Vorlage:Str trim
     | {{#invoke:Vorlage:lang|flat}}
     }}
 | {{#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
     | „Vorlage:Str trim“
     | {{#invoke:Text|quote
         |1={{#if: 
              | {{#invoke:Vorlage:lang|flat}}
              | {{#invoke:Vorlage:lang|flat}} }}
         |2={{#if: {{#invoke:TemplUtl|faculty|}}|de-CH|de}}
         |3=1}} }}

}}{{#if:

   |  (<templatestyles src="Person/styles.css" />{{#if:  | :  }}{{#if:  | , deutsch: „“ }})
   | {{#if: 
       |  ({{#if:  | , deutsch: „“ }})
       | {{#if:  |  (deutsch: „“) }}
 }}

}}{{#if: {{{zitat}}}

   | {{#if: 
       | {{#if: {{{zitat}}}
           | Vorlage:": Text= und 1= gleichzeitig, bzw. Pipe zu viel }} }}
   | Vorlage:": Text= fehlt }}{{#if:  | {{#if: {{#invoke:Text|unstrip|{{{ref}}}}}
             | Vorlage:": Ungültiger Wert: ref=
             | {{{ref}}} }}

}}|.{{#if:{{#invoke:TemplUtl|faculty|}}|{{#if:||{{#ifeq: | JaKeinHinweis |{{#switch:

   |0|=Vorlage:Toter Link/Core{{#if: https://peps.python.org/pep-0636/
       | {{#if:  | [1] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: 
           | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }}
         }}
       |   (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.)
     }}{{#switch: 
         |no|0|=
         |#default={{#if:  ||  }}
    }}{{#invoke:TemplatePar|check
         |opt      = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
    }}{{#if: https://peps.python.org/pep-0636/
      | {{#if:{{#invoke:URLutil|isWebURL|https://peps.python.org/pep-0636/}}
          || {{#if:  ||  }} 
        }}
      | {{#if: 
           | {{#if:  ||  }}
           | {{#if:  ||  }}
        }}
    }}{{#if: 
       | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
         }}
    }}{{#switch: deadurl
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://peps.python.org/pep-0636/ Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. )  {{#if: 
            | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }}
         }}Vorlage:Toter Link/Core{{#switch: 
          |no|0|=
          |#default= {{#if:  ||  }}
        }}{{#invoke:TemplatePar|check
         |all      = inline= url=
         |opt      = datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
       }}{{#if: https://peps.python.org/pep-0636/
       | {{#if:{{#invoke:URLutil|isWebURL|https://peps.python.org/pep-0636/}}
          || {{#if:  ||  }} 
        }}
    }}{{#if: 
         | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
           }}
    }}{{#switch: deadurl
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}[https://peps.python.org/pep-0636/ }}|{{#switch: 
   |0|=Vorlage:Toter Link/Core{{#if: https://peps.python.org/pep-0636/
       | {{#if:  | [2] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: 
           | {{#if:  | | Vorlage:Toter Link/archivebot }}
         }}
       |   (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.)
     }}{{#switch: 
         |no|0|=
         |#default={{#if:  ||  }}
    }}{{#invoke:TemplatePar|check
         |opt      = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
    }}{{#if: https://peps.python.org/pep-0636/
      | {{#if:{{#invoke:URLutil|isWebURL|https://peps.python.org/pep-0636/}}
          || {{#if:  ||  }} 
        }}
      | {{#if: 
           | {{#if:  ||  }}
           | {{#if:  ||  }}
        }}
    }}{{#if: 
       | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
         }}
    }}{{#switch: 
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://peps.python.org/pep-0636/ Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. )  {{#if: 
            | {{#if:  | | Vorlage:Toter Link/archivebot }}
         }}Vorlage:Toter Link/Core{{#switch: 
          |no|0|=
          |#default= {{#if:  ||  }}
        }}{{#invoke:TemplatePar|check
         |all      = inline= url=
         |opt      = datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
       }}{{#if: https://peps.python.org/pep-0636/
       | {{#if:{{#invoke:URLutil|isWebURL|https://peps.python.org/pep-0636/}}
          || {{#if:  ||  }} 
        }}
    }}{{#if: 
         | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
           }}
    }}{{#switch: 
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}[https://peps.python.org/pep-0636/ }} }}}}}}}}}}{{#if:|
        {{#invoke:Vorlage:Internetquelle|archivBot|stamp={{{archiv-bot}}}|text={{#if:|Vorlage:Webarchiv/archiv-bot}}

}}}}{{#invoke:TemplatePar|check |all= url= titel= |opt= autor= hrsg= format= sprache= titelerg= werk= seiten= datum= abruf= zugriff= abruf-verborgen= archiv-url= archiv-datum= archiv-bot= kommentar= zitat= AT= CH= offline= |cat= {{#ifeq: 0 | 0 | Wikipedia:Vorlagenfehler/Vorlage:Internetquelle}} |template= Vorlage:Internetquelle |format=0 |preview=1 }}</ref>

<syntaxhighlight lang="haskell"> match n:

   case (): ...
   case (x, *xs): ...

</syntaxhighlight>

Textverarbeitung

{{#if: String-Matching-Algorithmus|{{#ifexist:String-Matching-Algorithmus|

|{{#if: |{{#ifexist:{{{2}}}|

→ Haupt{{#if:|seite|artikel}}: [[{{{2}}}{{#if: ||{{{titel2}}}}}]]{{#if: |{{#ifexist:{{{3}}}| und [[{{{3}}}{{#if: ||{{{titel3}}}}}]]|}}|}}

|{{#if: |{{#ifexist:{{{3}}}|

→ Haupt{{#if:|seite|artikel}}: [[{{{3}}}{{#if: ||{{{titel3}}}}}]]

|}}|}}|}}|}}|}}|Einbindungsfehler: Die Vorlage Hauptartikel benötigt immer mindestens ein Argument.}}

Pattern Matching wird auch verwendet, um Text zu bearbeiten. In Programmiersprachen wie Perl oder awk und auch in den meisten Texteditoren existieren Werkzeuge, um einen Text nach einem Muster zu durchsuchen. Die Muster bestehen aus regulären Ausdrücken.

Siehe auch

Literatur

  • {{#ifexist:Vorlage:bibISBN/{{#invoke:URIutil|plainISBN|0521826144}}

| {{bibISBN/{{#invoke:URIutil|plainISBN|0521826144}}

  |record = Vorlage:bibISBN/{{#invoke:URIutil|plainISBN|0521826144}}
  |format = Literatur
  |Autor = 
  |Titel = 
  |TitelErg = 
  |Band = 
  |Auflage = 
  |Kommentar= Abschnitt 3.17, HTML-Version
  |Kapitel = 
  |Seite = 
  |Seiten = 
  |Spalten = 
  |ArtikelNr = 
  |Fundstelle = 
  |DOI = 
  |Online = 
  |URL = 
  |Linktext = 
  |Format = 
  |KBytes = 
  |Abruf = 
  |Typ = 

}}{{#ifeq: 0 | 0

   | {{#invoke:TemplatePar|check
       |all= 1=
       |opt= 2= format= Autor= Titel= TitelErg= Hrsg= Sammelwerk= WerkErg= Band= Nummer= Auflage= Datum= Sprache= NummerReihe= BandReihe= HrsgReihe= Kommentar= Kapitel= Seite= Seiten= Spalten= ArtikelNr= Fundstelle= DOI= Online= URL= Linktext= Format= KBytes= Abruf= Typ=

|template=Vorlage:bibISBN |cat=Wikipedia:Vorlagenfehler/Vorlage:BibISBN}}

     }}

| {{#if:||{{#if:{{#invoke:URIutil|plainISBN|0521826144}}|Der BibISBN-Eintrag [[Vorlage:BibISBN/{{#invoke:URIutil|plainISBN|0521826144}}]] ist nicht vorhanden. Bitte prüfe die ISBN und lege ggf. einen {{#ifeq:Vorlage:bibISBN/{{#invoke:URIutil|plainISBN|0521826144}}|Pattern Matching|{{#switch:{{{LINK}}}|JA=|NEIN=}}}}[[[:Vorlage:Neuer Abschnitt/URL]] neuen Eintrag] an.|Die angegebene ISBN „0521826144“ ist fehlerhaft. Bitte prüfe und korrigiere die ISBN.}}{{#ifeq: 0 | 0 | }}}}}}

  • {{#ifexist:Vorlage:bibISBN/{{#invoke:URIutil|plainISBN|0134843460}}

| {{bibISBN/{{#invoke:URIutil|plainISBN|0134843460}}

  |record = Vorlage:bibISBN/{{#invoke:URIutil|plainISBN|0134843460}}
  |format = Literatur
  |Autor = 
  |Titel = 
  |TitelErg = 
  |Band = 
  |Auflage = 
  |Kommentar= 
  |Kapitel = 
  |Seite = 
  |Seiten = 
  |Spalten = 
  |ArtikelNr = 
  |Fundstelle = 
  |DOI = 
  |Online = 
  |URL = 
  |Linktext = 
  |Format = 
  |KBytes = 
  |Abruf = 
  |Typ = 

}}{{#ifeq: 0 | 0

   | {{#invoke:TemplatePar|check
       |all= 1=
       |opt= 2= format= Autor= Titel= TitelErg= Hrsg= Sammelwerk= WerkErg= Band= Nummer= Auflage= Datum= Sprache= NummerReihe= BandReihe= HrsgReihe= Kommentar= Kapitel= Seite= Seiten= Spalten= ArtikelNr= Fundstelle= DOI= Online= URL= Linktext= Format= KBytes= Abruf= Typ=

|template=Vorlage:bibISBN |cat=Wikipedia:Vorlagenfehler/Vorlage:BibISBN}}

     }}

| {{#if:||{{#if:{{#invoke:URIutil|plainISBN|0134843460}}|Der BibISBN-Eintrag [[Vorlage:BibISBN/{{#invoke:URIutil|plainISBN|0134843460}}]] ist nicht vorhanden. Bitte prüfe die ISBN und lege ggf. einen {{#ifeq:Vorlage:bibISBN/{{#invoke:URIutil|plainISBN|0134843460}}|Pattern Matching|{{#switch:{{{LINK}}}|JA=|NEIN=}}}}[[[:Vorlage:Neuer Abschnitt/URL]] neuen Eintrag] an.|Die angegebene ISBN „0134843460“ ist fehlerhaft. Bitte prüfe und korrigiere die ISBN.}}{{#ifeq: 0 | 0 | }}}}}}

Einzelnachweise

<references />