Ich möchte eine Liste von Verkettungen in Haskell machen. Ich habe [1,2,3] und [4,5,6] und ich möchte [14,15,16,24,25,26,34,35,36] produzieren. Ich weiß, dass ich zipWith oder etw verwenden kann, aber wie soll ich das Äquivalent machen von: foreach in first_array foreach in second_array
Ich denke, ich muss Karten- und Halbcurry-Funktionen verwenden, kann es aber nicht wirklich alleine machen: S
Sie können die Tatsache ausnutzen, dass Listen Monaden sind und die Do-Notation verwenden:
%Vor% Sie können auch die Tatsache ausnutzen, dass Listen anwendbare Funktoren sind (vorausgesetzt, Sie haben Control.Applicative
importiert):
Beide ergeben folgendes:
%Vor% Verschachtelte Schleifen entsprechen verschachtelten Verwendungen von map
oder ähnlichen Funktionen. Erste Annäherung:
Das gibt Ihnen verschachtelte Listen, die Sie auf zwei Arten eliminieren können. Eine besteht darin, die Funktion concat :: [[a]] -> [a]
zu verwenden:
Eine andere Möglichkeit ist die Verwendung dieser integrierten Funktion:
%Vor%Verwenden Sie das:
%Vor% Andere Leute haben Listen-Comprehensions und die Listen-Monade erwähnt, aber diese gehen wirklich auf geschachtelte Verwendungen von concatMap
zurück.
Die allgemeine Lösung der Verkettung zweier Listen von ganzen Zahlen ist dies:
%Vor%Beispiel: concatInt [1,2,3] [4,5,6] == [14,15,16,24,25,26,34,35,36]
Komplexeres Beispiel: ConcatInt [0,2,10,1,100,200] [24,2,999,44,3] == [24,2,999,44,3,224,22,2999,244,23,1024,102,19999,144,103,14,12,12, 1999,144,13,10024,1002,100999,10044,1003,20024,200,2009999,20044,2003]
Tags und Links haskell