Created
October 9, 2012 00:18
-
-
Save bfb/3855780 to your computer and use it in GitHub Desktop.
Haskell Work
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Work where | |
import System.IO | |
type Data = String | |
type Hora = String | |
type Compromisso = String | |
type Agenda = [(Data, Hora, Compromisso)] | |
agendaCompromisso = [("10/10/2012", "10:00", "Dentista"), ("17/10/2012", "14:00", "Reuniao Geral"), ("17/10/2012", "19:00", "Ingles"), ("18/10/2012", "14:00", "Reuniao Semanal"), ("19/10/2012", "20:00", "Ingles")] | |
--1. Horários e datas de um compromisso | |
horarios :: Agenda->Compromisso->[(Data, Hora)] | |
horarios [] c = [] | |
horarios ((d,h,co):lista) c | |
|(c == co) = [(d, h)] ++ horarios lista c | |
|otherwise = horarios lista c | |
-- 2. Todos compromissos de um data | |
compromissos :: Agenda -> Data -> [Compromisso] | |
compromissos [] d = [] | |
compromissos ((d,h,c):lista) _data | |
|(d == _data) = c : compromissos lista _data | |
|otherwise = compromissos lista _data | |
-- 3. Verifca se existe compromisso numa data e hora | |
existeCompromisso :: Agenda -> Data -> Hora -> Bool | |
existeCompromisso ((d,h,c):agenda) _data horario | |
|(d == _data && h == horario) = True | |
|(null agenda) = False | |
|otherwise = existeCompromisso agenda _data horario | |
-- 4. Retorna a quantidade de compromissos de uma data | |
quantiCompromisso :: Agenda -> Data -> Int | |
quantiCompromisso ((d,h,c):agenda) _data | |
|(d == _data) = 1 + quantiCompromisso agenda _data | |
|(agenda == []) = 0 | |
|otherwise = quantiCompromisso agenda _data | |
-- 5. Insere um compromisso na agenda se o horário estiver disponível | |
insereCompromisso :: Agenda -> Data -> Hora -> Compromisso -> Agenda | |
insereCompromisso agenda _data hora compromisso | |
|(existeCompromisso agenda _data hora == False) = [(_data, hora, compromisso)] ++ agenda | |
|otherwise = agenda | |
-- 6. Retira um compromisso da agenda | |
excluiCompromisso :: Agenda -> Data -> Hora -> Compromisso -> Agenda | |
excluiCompromisso ((d,h,c):agenda) _data hora compromisso | |
|(d == _data && h == hora && c == compromisso) = agenda | |
|(null agenda) = agenda | |
|otherwise = (d,h,c) : excluiCompromisso agenda _data hora compromisso | |
-- 7. Lista todos os compromissos da agenda | |
imprimeAgenda :: Agenda -> IO () | |
imprimeAgenda a = putStr (todosCompromissos a) | |
todosCompromissos :: Agenda -> String | |
todosCompromissos ((d,h,c):agenda) | |
|null agenda = "" | |
|otherwise = show d ++ "\t" ++ show h ++ " " ++ show c ++ "\n" ++ todosCompromissos agenda |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment