Implement file system functions

This commit is contained in:
Manuel Thalmann 2024-06-15 21:25:22 +02:00
parent f71ef5723f
commit c631790636

View file

@ -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"]]
--