Wie von @KarlBielefeldt festgestellt, besteht der funktionale Ansatz für ein solches Problem darin, es als Rückgabe eines neuen Zustands von einem vorherigen Zustand zu betrachten. Die Funktionen selbst enthalten keine Informationen, sodass sie den Status m immer auf den Status n aktualisieren .
Ich denke, Sie finden dies ineffizient, weil Sie davon ausgehen, dass der vorherige Zustand im Speicher gehalten werden muss, während der neue Zustand berechnet wird. Beachten Sie, dass die Wahl zwischen dem Schreiben eines vollständig neuen Status oder dem erneuten Schreiben des alten Status ein Implementierungsdetail aus Sicht einer funktionalen Sprache ist.
Angenommen, ich habe eine Liste mit einer Million Ganzzahlen und möchte die zehnte um eine Einheit erhöhen. Es ist verschwenderisch, die gesamte Liste mit einer neuen Nummer an der zehnten Stelle zu kopieren. Dies ist jedoch nur die konzeptionelle Beschreibung der Operation für den Sprachkompilierer oder -interpreter. Dem Compiler oder Interpreter steht es frei, die erste Liste zu nehmen und nur die zehnte Position zu überschreiben.
Der Vorteil der Beschreibung des Vorgangs auf diese Weise besteht darin, dass der Compiler die Situation beurteilen kann, in der viele Threads dieselbe Liste an verschiedenen Positionen aktualisieren möchten. Wenn die Operation als "Gehe zu dieser Position und überschreibe, was du findest" beschrieben wird, ist es der Programmierer, nicht der Compiler, der dafür verantwortlich ist, sicherzustellen, dass Überschreibungen nicht kollidieren.
Nach alledem gibt es sogar in Haskell eine staatliche Monade , mit deren Hilfe Situationen modelliert werden können, in denen das "Beibehalten des Zustands" eine intuitivere Lösung für ein Problem darstellt. Beachten Sie jedoch auch, dass einige Probleme, die Sie als " inhärent statusbehaftet, wie das Schreiben in eine Datenbank " empfinden, unveränderliche Lösungen wie Datomic aufweisen . Dies kann überraschend sein, bis Sie verstehen, dass es sich um ein Konzept handelt, nicht unbedingt um dessen Umsetzung.