Frage

Dies kann ein Oxymoron, aber wie würde man eine Dateneinheit in der funktionalen Programmierung Stil aktualisieren? Von allem, was ich gelesen habe, funktionalen Stil Programmierung verwendet Transformationen eine Ausgabe auf unveränderliche Einheiten zurückzukehren. Das einzige, was ich denken kann vollständig wäre, die ursprüngliche Einheit zu ersetzen, aber das scheint fast das gleiche wie ein klassischen Update-Ansatz.

War es hilfreich?

Lösung

Sprechen Sie auf dem Datenträger Datenbankentität über oder Datenstrukturen im Speicher.

Für letztere funktionale Sprachen verwenden persistente Daten-Strukturen, die so implementiert werden, dass die neue Version und die alte Version bothavailable nach dem Update, aber sie haben gemeinsame Teile (so dass es effizienter ist). So erscheinen Sie eine völlig neue Datenstruktur zu zurückkehren, sondern in der Tat, es teilt die meisten seiner Umsetzung mit dem einen war es zu ändern.

Es gibt einige wirklich gute Implementierungen bei der clojure Quelle (in Java geschrieben) zu finden - ich nahm zwei von ihnen auseinander auf meinem Blog

http: //www.loufranco .com / blog / files / 20-Days-of-Clojure-Day-7.html

http: //www.loufranco .com / blog / files / 20-Days-of-Clojure-Day-8.html

Andere Tipps

Lou Franco hat es. Datenstrukturen in funktionalen Sprachen sind so ausgebildet, dass sie zu ändern, Sie die ursprüngliche Einheit „vollständig ersetzen“. Hinter den Kulissen, benutzen sie immer noch die meisten der alten: sie nur die geänderten Bits ersetzen. Die alte Version existiert noch, auch, aber Garbage Collection wird es zerstört schließlich so lange wie niemand verweist es.

Die kurze Antwort ist, dass in dem funktionalen Stil, jede Dateneinheit unveränderlich sein würde, also ein Update ist wirklich eine neue Dateneinheit mit dem aktualisierten Wert, die Art wie wie Strings arbeitet in .NET.

Die wirklich interessanten Herausforderungen kommen, wenn sie mit IO tun haben, es hart wird zu modellieren I / O in einer rein funktionalen Weise, die wie zu Abhilfen führt Monaden .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top