funktionale programmiersprachen



  • wie werden in rein funktionalen programmiersprachen input / outputs gelöst? oder funktionen mit zuständen wie prngs? die funktion soll ja den gesamtzustand nicht ändern können soviel ich verstanden habe



  • Man kann IO so Modellieren
    - Das Programm ist auch nur eine Funktion, es bekommt ein Welt-Objekt übergeben, arbeitet auf diesem und liefert ein neues Weld-Objekt zurück, mit dem dann weitergearbeitet wird
    - oder das Programm liefert eine Liste von Änderungen für das Welt-Objekt, die dan auf diesem angewand werden um ein neues Welt-Objekt zu erhalten

    Eine Möglichkeit: der prng gibt neben seinem Ergebis auch seinen aktuellen Zustand zurück, der dann beim nächsten Aufruf wieder übergeben wird.

    In rein funktionalen Sprachen gibt es keinen Zustand.



  • Dafür benutzt man auch gerne Monaden.

    Allerdings sind sie auch nicht unumstritten, da sie ja doch eher gegen das funktionale Prinzip gehen.

    Es gibt da auch ein Paper von Microsoft über I/O in funktionalen Programmiersprachen.



  • gary1195 schrieb:

    Man kann IO so Modellieren
    - Das Programm ist auch nur eine Funktion, es bekommt ein Welt-Objekt übergeben, arbeitet auf diesem und liefert ein neues Weld-Objekt zurück, mit dem dann weitergearbeitet wird
    - oder das Programm liefert eine Liste von Änderungen für das Welt-Objekt, die dan auf diesem angewand werden um ein neues Welt-Objekt zu erhalten

    Ist es das, was die "Monaden" syntaktisch erleichtert (mit 'nem impliziten Welt-Objekt oder sowas)?

    Ich habe keine Ahnung von Monaden, aber im Moment stell ich mir das so vor...



  • Die Hauptaufgabe der Monade beim IO ist dafür zu sorgen, dass die IO-Operationen in der richtigen Reihenfolge ausgewertet werden (Stichtwort: lazy evaluation).

    Hier eine interessante Seite zu Haskell IO http://www.haskell.org/haskellwiki/IO_inside. Hier wird auch das Weltobjekt-Modell benutzt.



  • gary1195 schrieb:

    Hier eine interessante Seite zu Haskell IO http://www.haskell.org/haskellwiki/IO_inside. Hier wird auch das Weltobjekt-Modell benutzt.

    Danke für den Lesetipp!



  • Justin Le hat einen Artikel über das Thema geschrieben, den ich sehr gut finde: http://blog.jle.im/entry/the-compromiseless-reconciliation-of-i-o-and-purity



  • ramsey schrieb:

    wie werden in rein funktionalen programmiersprachen input / outputs gelöst? oder funktionen mit zuständen wie prngs? die funktion soll ja den gesamtzustand nicht ändern können soviel ich verstanden habe

    U.a. durch "Composition", "Schnittstellen", "Definition" oder "Ausnahmen" - oder gar Verzicht.
    Zufallsgeneratoren, die immer nur die gleiche "Zufallszahl" produzieren, das muß man erstmal hinbekommen 😉
    Composition meint dann eben, man arbeitet mit diesen Typ "Zufallszahl" weiter..., konstruiert windige Funktionsabfolgen...

    Am einfachsten läßt sich ein Vorverständnis des Sachverhalts (bei Haskell) so aufbauen:
    Datentypen lernen und lernen, neue Datentypen zu erstellen. Die Datentypen können selbst ganz einfach sein, oder sehr komplex werden, etwa wenn sie selbst aus verschachtelten, interaktiven Algorithmen bestehen.

    Und wenn es gar nicht anders geht, dann werden eben "ökonomisch kontrollierte" "Seiteneffekte" zugelassen 🙂


Anmelden zum Antworten