Faltbare Methoden
Dezember 9, 2022Bis vor kurzem galten faltbare Bildschirme als technologisch unmöglich. Aber mit dem Aufkommen von Samsungs Galaxy Fold und den Prototypen anderer Unternehmen wird die Idee eines Faltbildschirms Wirklichkeit. Mit seiner Fähigkeit, sich im aufgeklappten Zustand in ein Tablet und im zusammengeklappten Zustand in ein Smartphone zu verwandeln, ist ein faltbares Telefon zu einer praktikablen Option geworden. Von diesen Geräten wird oft erwartet, dass sie dünn und im Taschenformat sind, und die Hersteller verbessern ihre Falten mit fortschrittlichen Scharniermechaniken weiter. Diese Geräte sind jedoch noch nicht für die breite Öffentlichkeit verfügbar. Während sich einige faltbare Telefone gut verkauft haben, sind bei anderen Probleme aufgetreten, darunter Kratzer auf dem Display, Luftblasen und die Möglichkeit, dass mechanisch bewegliche Teile beim Zusammenklappen nicht richtig funktionieren.
Es gibt mehrere Methoden zum Folden, und jede Methode kann auf eine einzelne Foldable-Instanz angewendet werden. Je nach Methode kann foldr entweder faul oder streng sein. Beim Anwenden eines Lazy Foldr wird das erste Element faul ausgewertet. Wenn ein Element nicht gefunden wird, wird das Ergebnis der Faltung als Wert von Int zurückgegeben. Die Standardimplementierung von Lazy Foldr basiert auf linksassoziativer Faltung, und die Optimierung für den Zugriff auf das erste Element in konstanter Zeit wird empfohlen. Im Gegensatz dazu ist foldl streng und ermöglicht die Berechnung des Endergebnisses, ohne einen tiefen Stapel von Zwischenergebnissen zu speichern.
Eine andere Form des Faltbaren ist die Corecursive-Reduktion. Diese Methode verwendet einen rekursiven Iterator, um alle Elemente in einer Struktur zu finden und dann ihre Auswirkungen zu bewerten. Im Allgemeinen ist die Eingabe endlich und die Ergebnisse werden in einem Durchgang ausgewertet. Um die Notwendigkeit zu vermeiden, die Effekte in einer Endlosschleife zu berechnen, kann ein Bindungsoperator verwendet werden. Es kann auch mit einer foldMap kurzgeschlossen werden. Die foldMap kombiniert die Ergebnisse der Faltung zu einem Monoid. Die foldMap f ist vorteilhaft, da sie g auf das Ergebnis der Faltung anwenden kann.
Im Gegensatz zu faulen faltbaren Methoden ist foldMap‘ im Akkumulator strikt. Dies liegt daran, dass foldMap f auf das Ergebnis der Faltung angewendet wird. Der Faltvorgang kann vereinfacht werden, indem eine geeignetere Faltmethode gewählt wird. Je nach Methode kann es effizienter sein, eine weniger polymorphe Variante faltbarer Methoden zu verwenden, z. B. ein Mappend.
In einigen Fällen kann der Bindungsoperator nützlich sein, um monadische Effekte kurzzuschließen. Beispielsweise kann die Set-Instanz in O(log n)-Zeit gesucht werden. Um zu verhindern, dass der Faltungsprozess durch Änderungen des Datentyps beeinflusst wird, können Sie die foldMap f durch eine foldMap mit der entgegengesetzten Assoziativität ersetzen.
Die Faltbare Instanz kann auch verwendet werden, um Instanzen von Strukturen mit einem einschränkenden Elementtyp zu definieren. Zum Beispiel hält Set seine Elemente in aufsteigender Reihenfolge, während Sum Zahlen als Monoide unter Addition abstrahiert. Die elem-Funktion ist mit der Eq-Einschränkung für Elementtypen verknüpft. Mit anderen Worten, das Element muss mit den Elementen vergleichbar sein, aus denen die faltbare Struktur besteht.
Der FRList-Typ kann für zusammengesetzte Funktionen verwendet werden und kann mit Applicative, Functor, Foldable, Monad und Alternative erweitert werden. Eine Liste ist ein freies Monoid für Haskell-Typen.