F # Version des Haskell-Patterns stimmt überein

8

Wie mache ich diese Haskell in F # sauber?

%Vor%     
Jimmy Hoffa 13.06.2012, 13:17
quelle

3 Antworten

21

Sie können die Funktion selbst nicht überladen, aber Sie können den Mustervergleich direkt verwenden:

%Vor%

Die Verwendung ist wie erwartet: add 1 2 3

Wenn Sie bereit sind, Tupel als Argumente zu verwenden (z. B. auf Curry und partielle Anwendung verzichten), können Sie es sogar kürzer schreiben:

%Vor%

Verwendung ist jetzt: add (1, 2, 3)

    
yamen 13.06.2012, 13:20
quelle
8

Rufen Sie in Haskell zurück, dass die allgemeine Form der Funktionen als eine Liste von Deklarationen mit Muster:

%Vor%

ist nur Zucker für die case -Analyse:

%Vor%

So kann die gleiche Übersetzung in andere Sprachen mit Mustervergleich, aber ohne Muster auf Deklarationsebene, durchgeführt werden.

    
Don Stewart 13.06.2012 13:38
quelle
5

Das ist rein syntaktisch. Sprachen wie Haskell, Standard ML und Mathematica ermöglichen es Ihnen, verschiedene Übereinstimmungsfälle so zu schreiben, als wären sie verschiedene Funktionen:

%Vor%

Während Sprachen wie OCaml und F # erfordern, dass Sie eine einzige Funktionsdefinition haben und match oder äquivalent in ihrem Körper verwenden:

%Vor%

Beachten Sie, dass Sie den Funktionsnamen nicht immer wieder mit dieser Syntax kopieren müssen, und Sie können Fälle leichter zuordnen:

%Vor%

Wie Yamen schrieb, curry mit let f a b = match a, b with ... in F #.

In der klassischen Rot-Schwarz-Baum-Implementierung finde ich die Duplizierung der Funktionsnamen und rechten Seiten in Standard ML und Haskell ziemlich hässlich:

%Vor%

verglichen mit dem äquivalenten OCaml oder F #:

%Vor%     
Jon Harrop 15.06.2012 10:48
quelle