{-Prova Final de LP2 - 25/02/99 ----------------------------- 1 - prove as seguintes propriedades: a) [1.5] map f (map g xs) = map (f . g) xs b) [1.5] length (xs ++ ys) = length xs + length ys 2 - [2.0] um dado problema necessita manipular datas (dia, mes e ano) e horas do dia (hora, minutos e segundos). Dadas as duas representacoes abaixo para esses tipos, explique vantagens e/ou desvantagens no uso de cada uma: representacao 1: data Date = Date Int Int Int data Time = Time Int Int Int representacao 2: type Date = (Int, Int, Int) type Time = (int, Int, Int) 3 - Um teclado programavel permite que se possa programar algumas de suas teclas para, ao serem pressionadas, expandirem o texto, evitando assim que o usuario digite totalmente sequencias que aparecem com frequencia. Dada a representacao do Teclado e de Macros programadas abaixo, faca funcoes solicitadas abaixo. Note que uma macro pode chamar outra! -} data Tecla = TF Int -- teclas de funcoes | Letra Char -- demais teclas | Backspace deriving Show data Macro = Macro Tecla [Tecla] -- mapeia uma tecla nas demais deriving Show -- a) [1.0] funcao que mostre uma string representando as teclas. -- Nao e' necessario implementar o backspace, apenas mostrar a tecla. --mostra :: [Tecla] -> String -- b) [2.0] expande um texto, baseado em macros predefinidas -- Nao e' necessario implementar o backspace. --expandeMacro :: [Tecla] -> [Macro] -> [Tecla] -- b) [2.0] implemente a tecla backspace. -- Atencao para suportar multiplos backspaces! --expandeBackspace :: [Tecla] -> [Tecla] --Exemplos: texto1 = [Letra 'a', Letra 'b', Letra 'c'] texto2 = [Letra 'a', TF 4, Letra 'c'] texto3 = [Backspace, TF 4, Letra 'c'] texto4 = [Letra 'a', TF 1, Letra 'c'] texto5 = [Letra 'a', Letra 'x', Letra 'y', Backspace , Letra 'c'] texto6 = [Letra 'a', Letra 'x', Letra 'y', Backspace, Backspace , Letra 'c'] macros = [Macro (TF 1) [Letra 'd', Letra 'e'], Macro (TF 4) [Letra 'a', Letra 'b']] {- mostra texto1 = "abc" mostra texto2 = "ac" mostra texto3 = "c" mostra (expandeMacro texto2 macros) = "aabc" mostra (expandeMacro texto4 macros) = "aabec" mostra (expandeBackspace texto5) = "axc" mostra (expandeBackspace texto6) = "ac" mostra (expandeBackspace texto3) = "c" -}