/ / Pattern-Matching auf Ints - Funktion, Haskell, Typen, Funktional-Programmierung, Pattern-Matching

Pattern-Matching auf Ints - Funktion, Haskell, Typen, Funktional-Programmierung, Pattern-Matching

Ich bin ein Anfänger beim Lernen von Haskell, und ich wollte wissen, ob Sie ein Match-Muster erstellen können Ints wie so:

 add x 0 = x
add x (1 + y) = 1 + x  + add x y,

Oder vielleicht auf diese Weise:

 add x 0 = x
add x (successor y) = 1 + x + add x y

Antworten:

13 für die Antwort № 1

Es gibt eine Erweiterung, mit der Sie das tun können, aber stattdessen sollten Sie einfach die Übereinstimmung anpassen yund subtrahieren 1 manuell:

add x y = 1 + x + add x (y - 1)

Die Erweiterung wird aufgerufen NPlusKPatterns. Wenn du Ja wirklich Ich möchte es verwenden (bedenken Sie, dass es in Haskell 2010 veraltet ist), es kann aktiviert werden, indem entweder a übergeben wird -XNPlusKPatterns Parameter zu GHC oder setzen a {-# LANGUAGE NPlusKPatterns #-} am Anfang der Datei.


2 für die Antwort № 2

Pattern Matching ist keine willkürliche Fallanalyse. Es ist eine disziplinierte, aber begrenzte Form der Fallanalyse, bei der die Fälle die sind Konstruktoren eines Datentyps.

Im speziellen Fall von Ganzzahlen mit Musterübereinstimmung werden die Konstruktoren als Ganzzahl angenommen Werte. Sie können also Integer-Werte als Fälle für den Mustervergleich verwenden:

foo 0 = ...
foo 2 = ...
foo x = ...

Sie können jedoch keine beliebigen Ausdrücke verwenden. Der folgende Code ist unzulässig:

foo (2 * x) = ...
foo (2 * x + 1) = ...

Sie kann wissen, dass die ganze Zahl entweder von der Form ist 2 * x oder 2 * x + 1. Aber das Typsystem weiß es nicht.


0 für die Antwort № 3

Die Formatierung Ihres Codes ist ein bisschen aus, so dass es schwierig ist zu wissen, was Sie fragen, aber Sie können einen Mustervergleich für die Eingabe vom Typ Int verwenden. Ein Beispiel wäre

add x 0 = x
add x y = x + y