Inhalt

Funktionale Programmierung mit Haskell - "Lazy Evaluation"


Vor- und Nachteile

Anwendbarkeit

    Der Entwickler ...

  • ... braucht sich nicht um die Auswertungsreihenfolge sorgen

  • ... kann sich darauf verlassen, dass komplexe, rechenintensive Operationen nur ausgefhrt werden, wenn sie tats„chlich ben÷tigt werden.

    nullvect = newvect 0 0 0
    upvect = newvect 0 1 0
    lvect = newvect (-1) 0 0
    rvect = newvect 1 1 0
    dirvect = newvect 0 0 1

    isnullvect :: LVect3D->Bool
    isnullvect v = (nullvect == v)

    vectlen :: LVect3D->Float
    vectlen p | (isnullvect p) = 0
        | otherwise = sqrt(((u p)*(u p))+((v p)*(v p))+((w p)*(w p)))

    vectlens :: [LVect3D]->[Float]
    vectlens [] = []
    vectlens (hd:tl) = vectlen hd : vectlens tl

    Main> head (vectlens [dirvect,rvect,nullvect,lvect])
    1.0
    Main>

  • ... hat die M÷glichkeit unendliche Datenstrukturen zu benutzen

    -- unendliche liste
    intlist :: Integer -> [Integer]
    intlist i = i : intlist (i+1)

    zehnints = take 10 (intlist 0)
    von13bis21 = take 9 (intlist 13)

    Main> zehnints
    [0,1,2,3,4,5,6,7,8,9]
    Main> von13bis21
    [13,14,15,16,17,18,19,20,21]
    Main>

  • .. muss unter Umst„nden die Auswertung von Teilausdrcken erzwingen

    fcat :: String->IO String
    fcat f = do
        content<-readFile f
        return (show content)

    flist :: String->IO ()
    flist f = do
        content<-readFile f
        putStrLn content

  • Nur die Methode flist gibt tats„chlich den Inhalt einer Datei aus.

  • Die Methode readFile wertet nicht strikt aus

  • Der Inhalt einer Datei wird nur eingelesen, wenn er ben÷tigt wird

Komplexit„t

  • Der Vergleich der Komplexitit„t strikter und nicht-strikter Auswertung kann schwer verallgemeinert werden

  • Bei nicht-strikter Auswertung muss der Kontext des Ausdrucks bercksichtigt werden

  • Generell wird die geringste Anzahl an Ausdrcken ausgewertet

  • Ist ein Ausdruck einmal ausgewertet worden, wird sein Wert wiederverwendet.

    Beispiel "Insertion Sort" Komplexit„tsverhalten

  • Bei strikter Auswertung quadratisch zur L„nge des zu sortierenden Feldes

  • Bei nicht-strikter Auswertung abh„ngig von L„nge und Struktur des Feldes:

  • Befinden sich beispielsweise doppelte Elemente in der Liste, so reduziert sich die Anzahl der Vergleichsoperatationen


zurück Seitenanfang weiter