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
|