2015-07-31 17 views
7

In F # haben wir List.partition und Array.partition, die jeweils ein Tupel von Listen und ein Tupel von Arrays zurückgeben.Warum gibt es keine Seq.partition in F #

also, warum gibt es kein Seq.partition, das ein Tupel von Sequenzen zurückgibt?

hier ist eine sehr einfache Implementierung: F# Snippets

so ... warum nicht dieser Teil des Kerns?

Antwort

15

In F # 4.0 (Visual Studio 2015) sind die Kernbibliotheken viel einheitlicher als zuvor, aber sie kommen immer noch nicht mit einer Implementierung von Seq.partition. Weitere Informationen hierzu finden Sie in der F # Sprachdesign-Diskussion: Regular functional operators producing two or more output collections.

Die Zusammenfassung ist, dass die Seq.partition Funktion ziemlich schwierig ist und ein Haben könnte es potenzielle Leistungsprobleme einführen. Es gibt ein paar Möglichkeiten, kann es funktionieren:

  • Es über die Eingangs Sammlung zweimal durchlaufen kann (wie die FsSnip Version), die Probleme verursachen können, wenn Sie komplexe verzögerte Berechnung haben (Sie alles zweimal tun)

  • Es kann einmal über die Eingabe iterieren, aber dann müsste es einige komplexe veränderliche Zustand teilen (die heimlich Speicher zuordnen könnte).

So Seq.partition nicht angemessen umgesetzt werden, während alle guten Eigenschaften zu halten, die Sie über die seq<'T> Art erwarten.

+0

Aber 'Seq.partition' ist im Grunde nur eine spezialisierte Version von' Seq.groupBy', die bereits die von Ihnen angesprochenen Probleme anspricht. Also, da wir das letztere haben, könnten wir das erstere als einen Wrapper um es herum implementieren, ohne irgendwelche zusätzlichen Bedenken zu erzeugen. Siehe meine vorgeschlagene Implementierung unten. – brianberns

1

Seq.partition ist nur eine spezialisierte Version von Seq.groupBy, so dass die Standardbibliothek die erstere als Wrapper um die letztere implementieren konnte, ohne irgendwelche neuen Probleme einzuführen.

+0

Fügen Sie Ihrem Code einen Kontext hinzu, um Ihre Antwort ausführlicher zu erklären. Dies wird einen Mehrwert für zukünftige Besucher schaffen. – miken32

+0

@ miken32: Fertig. – brianberns

Verwandte Themen