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)
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:
So kann die gleiche Übersetzung in andere Sprachen mit Mustervergleich, aber ohne Muster auf Deklarationsebene, durchgeführt werden.
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:
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%Tags und Links haskell f# syntax pattern-matching