Inhalt

Funktionale Programmierung mit Haskell - "Lazy Evaluation"


Anwendungsbeispiele

Nutzbarkeit von "lazy evaluation"

  • Sinnvoll beim Aufbau komplexer, abstrakter Strukturen, von denen nur Teile ausgewertet werden mssen

  • Beispiel Simulation/KI

  • Beispiel Szenengraph

  • Beispiel XML

    Notwendigkeit von strikter Auswertung

    Praxisbeispiel aus der "Haskell Mailing List"
    Thread "seq / strictness and laziness" - šbersetzte Auszge

    Ein Programmierer berichtet:

  • Ein Programmstck, dass mehrere Dateien einliest und verarbeitet, ben÷tigt zu viel Arbeitsspeicher

  • Es exisitiert eine Methode, die eine Datei einliest und ein intern definiertes Konstrukt zurckliefert

  • Der Entwickler hat erkannt, dass das Problem in der nicht-strikten Auswertung liegt :

  • Es werden zun„chst alle Dateien eingelesen, bevor der Ergebnisausdruck tats„chlich ausgewertet wird

  • Der Versuch, den Rckgabeausdruck mit dem seq-Befehl strikt auszuwerten, bringt keine Ver„nderung

    Antwort einer Entwicklerin:

  • seq wertet nur die erste Ebene eines Arguments aus

  • Handelt es sich dabei im einen strukturierten Typ, so wertet seq diesen nicht tief genug aus

  • Der Programmierer des Parsers msste eine eigene Routine fr seinen ben÷tigten Typ entwerfen, die alle Ebenen auswertet

  • Zum Beispiel msste fr eine Liste jedes Element dieser Liste ausgewertet werden


  • zurück Seitenanfang InhaltInhalt