Implement file system functions
This commit is contained in:
parent
f71ef5723f
commit
c631790636
1 changed files with 21 additions and 5 deletions
|
@ -39,7 +39,11 @@ example = Dir "root"
|
||||||
besprochen.
|
besprochen.
|
||||||
-}
|
-}
|
||||||
filesystem :: (Name -> FileSizeKB -> b) -> (Name -> [b] -> b) -> FileSystem -> b
|
filesystem :: (Name -> FileSizeKB -> b) -> (Name -> [b] -> b) -> FileSystem -> b
|
||||||
filesystem file dir fs = error "fixme"
|
filesystem file dir fs = case fs of
|
||||||
|
Dir name items ->
|
||||||
|
dir name (map (filesystem file dir) items)
|
||||||
|
File name fileSize ->
|
||||||
|
file name fileSize
|
||||||
|
|
||||||
{-
|
{-
|
||||||
Ausgehend von der Funktion 'filesystem' wollen wir nun konkrete Funktionen
|
Ausgehend von der Funktion 'filesystem' wollen wir nun konkrete Funktionen
|
||||||
|
@ -52,7 +56,10 @@ filesystem file dir fs = error "fixme"
|
||||||
Verzeichnisstruktur zurück gibt. Verwenden Sie die Funktion 'filesystem'.
|
Verzeichnisstruktur zurück gibt. Verwenden Sie die Funktion 'filesystem'.
|
||||||
-}
|
-}
|
||||||
size :: FileSystem -> Int
|
size :: FileSystem -> Int
|
||||||
size = filesystem (error "fixme") (error "fixme")
|
size = filesystem (\_ -> \fileSize -> fileSize) (\_ -> \sizes -> sum sizes)
|
||||||
|
-- >>> size example
|
||||||
|
-- 14606
|
||||||
|
--
|
||||||
|
|
||||||
{- Datei abfragen
|
{- Datei abfragen
|
||||||
Implementieren Sie die Funktion 'existsFile', die bei einer gegebenen
|
Implementieren Sie die Funktion 'existsFile', die bei einer gegebenen
|
||||||
|
@ -60,7 +67,13 @@ size = filesystem (error "fixme") (error "fixme")
|
||||||
Namen zu finden ist. Verwenden Sie die Funktion 'filesystem'.
|
Namen zu finden ist. Verwenden Sie die Funktion 'filesystem'.
|
||||||
-}
|
-}
|
||||||
existsFile :: Name -> FileSystem -> Bool
|
existsFile :: Name -> FileSystem -> Bool
|
||||||
existsFile name = filesystem (error "fixme") (error "fixme")
|
existsFile name = filesystem
|
||||||
|
(\fileName -> \_ -> name == fileName)
|
||||||
|
(\_ -> \items -> or items)
|
||||||
|
|
||||||
|
-- >>> existsFile "rome1.jpg" example
|
||||||
|
-- True
|
||||||
|
--
|
||||||
|
|
||||||
{- Pfade
|
{- Pfade
|
||||||
Ein Pfad ist eine Liste von Namen.
|
Ein Pfad ist eine Liste von Namen.
|
||||||
|
@ -80,7 +93,10 @@ findAll :: Name -> FileSystem -> [Path]
|
||||||
findAll name = filesystem file dir
|
findAll name = filesystem file dir
|
||||||
where
|
where
|
||||||
file :: Name -> Int -> [Path]
|
file :: Name -> Int -> [Path]
|
||||||
file n _ = error "fixme"
|
file n _ = if n == name then [[n]] else []
|
||||||
dir :: Name -> [[Path]] -> [Path]
|
dir :: Name -> [[Path]] -> [Path]
|
||||||
dir n subs = error "fixme"
|
dir n subs = map (\path -> [n] ++ path) (concat subs)
|
||||||
|
|
||||||
|
-- >>> findAll "notes.txt" example
|
||||||
|
-- [["root","desktop","notes.txt"],["root","pictures","holiday2018","notes.txt"]]
|
||||||
|
--
|
||||||
|
|
Loading…
Reference in a new issue