Skip to content

Instantly share code, notes, and snippets.

@bfb
Created October 9, 2012 00:18
Show Gist options
  • Save bfb/3855780 to your computer and use it in GitHub Desktop.
Save bfb/3855780 to your computer and use it in GitHub Desktop.
Haskell Work
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