Der Zugriff auf ein Bestimmtes Element in einem Tupel
Haskell-newbie Berichterstattung in.
Frage ist wie folgt:
In Haskell haben wir fst
und snd
dass das erste und das zweite Element eines 2-Tupels. Warum haben wir eine einfache Möglichkeit für den Zugriff auf das i-te element von jedem Tupel? Jetzt habe ich ein 3-Tupel, das ich Lesen will das 1. element und die einzige Möglichkeit, die Erfüllung dieser Aufgabe tut pattern-matching-Tricks. Warum kann das nicht getan werden, einfacher? Oder vielleicht gibt es eine einfache Möglichkeit?
- Nichts falsch mit
third (_, _, x) = x
? - Das ist genau das, was ich bin reden über. Was verhindert, dass die Sprache von einem besonderen Konstrukt, das würde ersparen Sie uns die Mühe des Schreibens Funktionen wie die, die Sie gerade erwähnt?
- Was wäre so ein Konstrukt Aussehen? Es kann nicht sein, eine Funktion, die nicht mit dem aktuellen system, und die Einführung einer neuen Sprache-level-Konstrukt ist es nicht Wert in jeder Hinsicht, vor allem, wenn man bedenkt, dass größere Tupel sind selten und selten eine gute Idee (Haben Sie den Ausdruck gehört "mit jeder neuen features beginnt mit -100 Punkten"?).
- Mögliche Duplikate von N-Ary-Versionen der Tupel Funktionen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was verhindert, dass die Sprache aus, die den speziellen konstruieren Sie wollen, ist Ihr design. Die Designer einfach nicht, diese, weil Sie es erschweren würde die Sprache, die definition, die Recht minimalistisch.
fst
undsnd
sind library-Funktionen für den Fall von Paaren; Sie können definieren, alle anderen sich selbst, oder besser, define-record-Typen für Ihre Daten, so dass Ihre Daten Mitglieder haben entsprechende Namen.(Es kann sein, dass GHC hat eine Verlängerung um dies zu tun, aber ich habe nicht begegnet sein; überprüfen Sie die Dokumentation oder Fragen auf der mailing-Liste um sicher zu sein.)fst
undsnd
.Check-out die Tupel-Bibliothek auf hackage. Es hat überladenen Funktionen, die für verschiedene Operationen auf Tupeln (bis auf eine vordefinierte Größe).
N-Tupel sind, nicht eine Daten-Struktur für die Indizierung über eine
Int
Schlüssel, statt, Sie sollten Blick auf eine indizierte voreingenommen Datenstrukturen, wie arrays oder finger-Bäume.Nun, man könnte sich vorstellen, das schreiben eine typeclass für eine Familie von Tupel-Typen bietet eine
index
operation, aber wir haben bereits arrays, und es gibt eine Menge von boilerplate notwendig, um Tupel von jeder Art nahtlos bieten diese operation an. Die macht gewonnen ist nicht der Mühe Wert.Kann es leichter sein, mit einer letzten alternative, der
Objektiv Paket. Die Tupel-Modul hat Selektoren für bis zu 9-element-Tupel und unkompliziert näher zu bestimmen, wenn nötig.
Können Sie auch die
Objektiv - Paket zu aktualisieren Elementen, polymorph, Typ ändern, auf update.
Mit und ohne infix-Operatoren:
Den github readme ist ein guter Ort, um zu starten, um herauszufinden, mehr über die zugrunde liegende Theorie sowie zahlreiche Beispiele.
Nicht nur-Tupeln,
Ähnliche syntax funktioniert für
Traverables
undFoldables
, also Bäume, Maps, Vektoren, etc. Zum Beispiel, wenn ich hatte eine Liste von Tupeln kann ich Zugriff auf das Dritte Tupel-element am index 1 durch das zusammensetzen derelement 1
auf die erste index-element mit_3
Zugriff auf das Dritte Tupel-element.Die Frage, ein Ansatz, dies zu tun mit template haskell war vorher hier angesprochen.
Einem Beispiel:
Von hier aus.
Nikita Volkov neue "record" - Bibliothek hat ein feature, das scheint, zu tun, was Sie wollen. Die Suche für das Stichwort "Tupel sind Aufzeichnungen zu!" auf der verlinkten Seite.
Es sieht aus wie die Bibliothek befindet sich noch in der Entwicklung, so dass es möglicherweise nicht so einfach zu installieren und zu verwenden, jetzt, wie es in Zukunft sein werden.