Ich muss oft mehrere Funktionen auf die gleichen Daten zuordnen. Ich habe dpMap umgesetzt, dies zu tun für michHaskell sinnlose Leistung - effizient mehrere Funktionen auf die gleichen Daten zuordnen
dpMap fns = (`map` fns) . flip ($)
dpMap ist eine Funktion, bedeutet das ich die Daten gelesen dt nur einmal (wie eine nur mit dem gleichen Eingang gespeist Schaltung Einem sinnloses System erinnert an einer Schaltung. nur die Rohrleitungen keine Daten)?
Betrachten Sie als Beispiel die Berechnung des Minimums und Maximums einer Liste dt.
minimax dt = (dpMap [minimum, maximum]) dt
(I des dt befreien, sondern muß -XNoMonomorphismRestriction verwenden bekommen kann)
Gibt es wie dies einen Leistungsvorteil gegenüber der Umsetzung in einer Punkt-Voll Form die gleiche Funktion ?:
minimax2 dt = [minimum dt, maximum dt]
EDIT: Gibt es eine allgemeine Implementierung von dpMap, die mit konstantem Speicher arbeitet?
Ich fand einen anderen netten Blogpost: http://www.haskellforall.com/2013/08/composable-streaming-folds.html; hoffe, dass dies hilft.
EDIT2: Nach etwas mehr Kontext, hier eine Lösung ist, auch wenn ich nicht über eine genaue Umsetzung der dpMap, ist das Muster einfach genug, dass es keine separate Funktion übernimmt keine Garantie:
minimax = (,) <$> minimum <*> maximum
Verbrauch:
> minimax [1..100]
(1,100)
Wenn Sie wollen auch die Summe und die Länge berechnen
func = (,,,) <$> minimum <*> maximum <*> sum <*> length
Verwendung
:
> func [1..100]
(1,100,5050,100)
Es ist sinnlos, weil beide Versionen zweimal über die Liste gehen. Verwenden Sie die Falte, um min/max auf einmal zu erhalten. –
eine andere sinnlose Definition: 'dpMap fns = (fns <*>). rein. –
n.b. 'dpMap = sequence' (obwohl mit einem speziellen Typ). – dave4420