Haskell Liste der Tupel zum Auflisten?

8

Ist es möglich, eine Liste von Tupeln [(Int,Int)] als generische Methode zu konvertieren, die für jede Eingabegröße gültig ist? .. Ich sah in verschiedenen Fragen, dass das nicht generisch ist

Beispiel:

%Vor%     
Sudantha 07.06.2011, 18:56
quelle

5 Antworten

8

Ihre Frage ist nicht sehr sicher, wie die Tupel in eine Liste umgewandelt werden sollen. Ich nehme an, dass Sie möchten, dass sie flatend sind - zum Beispiel, [(1,2),(3,4)] sollte [1,2,3,4] werden.

Diese Übersetzung ist nur möglich, wenn die beiden Elemente Ihres Tupels vom selben Typ sind, als Sie etwas tun können:

%Vor%

Im allgemeinen Fall ist eine solche Übersetzung unmöglich. Eine Sache, die ich mir vorstellen könnte, um das Unmögliche möglich zu machen, ist die Verwendung von Either , um die zwei verschiedenen Typen zusammenzufassen:

%Vor%     
fuz 07.06.2011, 19:02
quelle
8

Die Objektiv -Bibliothek verarbeitet diesen und ähnliche Fälle konsistent.

%Vor%

Um aus einer Liste von Listen zu konvertieren:

%Vor%

Zusatz bearbeiten:


traverse arbeitet mit Traversable

traverse funktioniert mit jedem Datentyp, der eine Traversable -Instanz hat, zum Beispiel Bäume.

%Vor%     
Davorak 16.01.2013 23:52
quelle
6

Sie können auch eine Falte verwenden und eine explizite Rekursion vermeiden:

%Vor%

Oder:

%Vor%

(Für Elemente desselben Typs)

    
danlei 07.06.2011 21:13
quelle
1

Dies kann auch durch die homogene Tupel-Bibliothek erreicht werden (Disclaimer: welches ich der Autor bin von). Es definiert Wrapper für Tupel, die Instanzen von Traversable (und andere wie Applicative und Monad ) bilden. Ein Tupel kann also in eine Liste von toList . Tuple2 konvertiert werden (wobei toList stammt von Data.Foldable ) und

%Vor%

Sie können es auch für andere Tupel verwenden, zum Beispiel concatMap (toList . Tuple5) etc.

    
Petr Pudlák 15.06.2014 05:29
quelle
0
%Vor%     
rochem 07.06.2011 19:02
quelle

Tags und Links