Wie zippen Sie Listen mit unterschiedlicher Länge?

8

Wie kann ich zip zwei Listen wie

%Vor%

ohne Restelemente in der ersten Liste zu verwerfen?

Ich möchte zusätzliche Elemente mit einer leeren Liste zippen, wenn es möglich ist.

    
zerospiel 14.03.2014, 10:54
quelle

5 Antworten

9
%Vor%

Solange es Elemente gibt, können wir sie einfach zippen. Sobald uns die Elemente ausgehen, zippen wir einfach die verbleibende Liste mit einer unendlichen Liste des Füllelements.

In Ihrem Fall würden Sie dies als

verwenden %Vor%     
Zeta 14.03.2014, 11:02
quelle
8

Eine andere Lösung besteht darin, eine Zip-Funktion zu erstellen, die auf Monoids funktioniert und die fehlenden Werte mit mempty:

füllt %Vor%     
Reite 14.03.2014 11:09
quelle
1

Ich denke, es wird sehr einfach für Sie sein, wenn Sie neu in der Programmierung in Haskell sind

%Vor%     
MIRMIX 14.03.2014 13:01
quelle
1

Manchmal möchte ich meine Liste nicht auffüllen. Zum Beispiel, wenn ich nur Listen mit gleicher Länge komprimieren möchte. Hier ist eine allgemeine Lösung, die eventuell zusätzliche Werte zurückgibt, wenn eine Liste länger ist.

%Vor%

Die Verwendung von (zps,svs) = zipWithSave f as bs , svs kann einer von drei Fällen sein: Just (Left x) wobei Reste von as als x , Just (Right x) zurückgegeben werden, wobei Reste von bs zurückgegeben werden, oder Nothing im Fall von Listen gleicher Länge.

Ein weiterer allgemeiner Zweck besteht darin, nur zusätzliche Funktionen für jeden Fall bereitzustellen.

%Vor%

Dies ist nur eine Ausarbeitung von Zetas Ansatz. Diese Funktion wird dann als (mithilfe von {- # LANGUAGE tupleSections # -}) implementiert:

%Vor%     
Trevor 27.03.2015 20:12
quelle
0

Eine alternative Implementierung der Lösung von Reite, mit Funktionen höherer Ordnung, nur zum Spaß. :) Möglicherweise langsamer, da ich denke, dass die Längenfunktionen zusätzliche Durchläufe der Listen erfordern.

%Vor%     
imladris 14.03.2014 11:44
quelle

Tags und Links