0611346979 info@waheeda.nl
Selecteer een pagina

Geben Sie einen Titel für Ihr Umkleben-Muster an, und geben Sie einen regulären Ausdruck mit Schlüsselwörtern an, die Sie in Kommentaren erkennen möchten. Beispiel: (`W|`)(? Refactor)(`W|`)(.*). Beachten Sie jedoch, dass das Hinzufügen eines Features zu einem Muster nur möglich ist, wenn das Muster bereits auf einer Feature-Liste basiert. Mit anderen Worten, Sie können einem Basismuster, das mit einem einzelnen Feature erstellt wurde, kein Feature hinzufügen. Diskriminierte Union-Muster können einfache benannte Fälle sein, oder sie können einen Wert oder ein Tupel mit mehreren Werten haben. Wenn ein Wert vorhanden ist, müssen Sie einen Bezeichner für den Wert angeben. Bei einem Tupel müssen Sie ein Tupelmuster mit einem Bezeichner für jedes Element des Tupels oder einen Bezeichner mit einem Feldnamen für ein oder mehrere benannte Union-Felder angeben. Beispiele finden Sie in den Codebeispielen in diesem Abschnitt. Eine weitere sehr häufige Operation auf Listen ist die Verkettung. Das List-Modul enthält tatsächlich ein paar verschiedene Möglichkeiten, dies zu tun. Es gibt List.append, um ein Paar Listen zu verketten. Klammern können um Muster gruppiert werden, um die gewünschte Assoziativität zu erreichen.

Im folgenden Beispiel werden Klammern verwendet, um die Assoziativität zwischen einem AND-Muster und einem Cons-Muster zu steuern. Die fehlererkennenden Funktionen von Matchanweisungen sind, wenn überhaupt, wichtiger als ihre Leistung. Wir haben bereits ein Beispiel für OCamls Fähigkeit gesehen, Probleme in einem Muster-Match zu finden: In unserer gebrochenen Implementierung von drop_value warnte Uns OCaml, dass der letzte Fall redundant sei. Es gibt keine Algorithmen, um zu bestimmen, ob ein Prädikat, das in einer allgemeinen Sprache geschrieben wurde, redundant ist, aber es kann zuverlässig im Kontext von Mustern gelöst werden. Der Klammeroperator, der auf eine Liste angewendet wird, kann an einer beliebigen Stelle in einem Ausdruck angezeigt werden. Wenn es auf der linken Seite einer Zuordnung erscheint, ändert es eines der Elemente in der Liste, so dass das erste Element der Frucht von “Banane” in “Birne” und das letzte von “Quince” in “orange” geändert wurde. Eine Zuordnung zu einem Element einer Liste wird als Artikelzuweisung bezeichnet. Die Elementzuweisung funktioniert nicht für Zeichenfolgen: Wenn wir unser Destutter-Beispiel mit Base.Poly open neu schreiben, sehen wir, dass es einen polymorphen Typ erhält und jetzt für Eingaben verschiedener Typen verwendet werden kann.

Nun, da wir mehr darüber wissen, wie Listen und Muster funktionieren, betrachten wir, wie wir ein Beispiel aus Kapitel 1, Rekursive Listenfunktionen, verbessern können: die Funktion destutter, die sequenzielle Duplikate aus einer Liste entfernt. Hier ist die Implementierung, die zuvor beschrieben wurde: Mit List.map definieren wir die Funktionslängen, die eine Liste von Zeichenfolgen in eine Liste ganzzahliger Längen konvertiert. List.fold wird dann verwendet, um die Zeilen zu iterieren, wobei map2_exn verwendet wird, um das Maximum des Akkumulators mit den Längen der Zeichenfolgen in jeder Zeile der Tabelle zu nehmen, wobei der Akkumulator auf die Längen der Kopfzeile initialisiert wird. Beachten Sie die Verwendung von _ in der obigen Übereinstimmung. Dies ist ein Platzhaltermuster, das mit jedem Wert übereinstimmt, jedoch ohne Bindung eines Variablennamens an den betreffenden Wert. Dieses Beispiel ist besonders einfach, da der Akkumulator und die Listenelemente vom gleichen Typ sind.