--Primeira Prova de LP2 - 1/1999 - 27/05/1999 --=========================================== -- (1.0) defina recursivamente as funcoes de concatenacao (++) e reverse. -- use os nomes abaixo, para evitar conflitos com as -- funcoes predefinidas --myAppend :: [t] -> [t] -> [t] --myReverse :: [t] -> [t] {- (2.0) Prove as seguintes propriedades: xs ++ [] = xs reverse (xs ++ ys) = reverse ys ++ reverse xs (2.0) Qual a diferenca entre polimorfismo (funcoes polimorficas) e overloading? De exemplos. -} --dado o tipo Picture Abaixo, defina as seguintes funcoes: type Line = [Char] type Picture = [Line] coluna :: Picture coluna = [['#','.','.','.'], ['#','.','.','.'], ['#','.','.','.'], ['#','.','.','.']] linha :: Picture linha = [['#','#','#','#'], ['.','.','.','.'], ['.','.','.','.'], ['.','.','.','.']] -- inverTLine :: Line -> Line -- (1.0) invertLine troca os caracteres '#' por '.' em -- uma linha, e vice-versa. -- invertLine ['#','.','#','.'] = ['.','#','.','#'] --invertPicture :: Picture -> Picture --(1.0) invertPicture faz o mesmo que invertLine, mas em -- uma Picture --(0.5) flipH :: Picture -> Picture -- flipH inverte as Linhas de uma Picture, Horizontalmente. --(0.5) flipV :: Picture -> Picture --flipV inverte as colunas de uma Picture, Verticalmente. -- superImpose :: Picture -> Picture -> Picture -- (1.5) superImpose combina duas fuguras em uma. -- dica: defina uma funcao -- superImposeLine :: Line -> Line -> Line -- superImposeLine ['#','.','#','.'] ['#','#','.','.'] -- = ['#','#','#','.'] -- (1.0) Baseado nas funcoes e constantes dadas acima, como -- poderia ser definida uma constante "quadrado"? -- quadrado :: Picture