Resolucao da Lista 02-- Funcao base para as questoesnove,cinco,um,dois,tres,quatro,seis,sete,oito,zero :: [Int]zero = [4,1,2,1,2,1,4]um = [0,2,1,2,1,2,1,2,1,2,1]dois = [3,2,5,2,3]tres = [3,2,4,2,4] quatro = [1,1,2,1,4,2,1,2,1]cinco = [4,2,3,2,4]seis = [4,2,4,1,4]sete = [3,2,1,2,1,2,1,2,1]oito = [4,1,5,1,4]nove = [4,1,4,2,1,2,1]--Questao 01-- recebe um dos numeros por extenso e devolve a lista considerando que posicao 0 quantidade de asteriscos, porsicao 1 espacos e vai alternando entre asterisco e espacostoString :: [Int] -> StringtoString [ ] = [ ] -- nao necessitatoString [n] = impAsterisco ntoString (a : b : c) = impAsterisco a ++ impEspaco b ++ toString c -- c eh cauda, b eh segundo elemento e a eh o primeiro elemento-- auxilia na impressao dos asteriscosimpAsterisco :: Int -> StringimpAsterisco 0 = [ ]impAsterisco qtd = "*" ++ impAsterisco (qtd - 1)-- auxilia nos espacosimpEspaco :: Int -> StringimpEspaco 0 = [ ]impEspaco qtd = ' ' : impEspaco (qtd - 1) --aspas simples porque eh para concatenar com uma lista-- Questao 02type Linha = StringtoLinhas :: String -> [Linha]toLinhas [ ] = [ ]toLinhas (a : b : c : d) = ([a] ++ [b] ++ [c] ) : toLinhas d -- a, b e c representa cada elemento ou seja cada "*" e d eh o resto dos astericos e espacos--para testar coloque no terminal toLinhas (toString nove) nove pode ser qualquer um dos outros numeros de zer - nove-- Questao 03--imprime os \n a cada tres caracteresshowLinhas :: [Linha] -> StringshowLinhas [n] = nshowLinhas (a : b) = a ++ "\n" ++ showLinhas b ++ "\n"-- Questao 04-- recebe duas listas que podem ser numeros e concatena numa so listajuntaLinhas :: [Linha] -> [Linha] -> [Linha] juntaLinhas [ ] [ ] = [ ]juntaLinhas (a1 : b1) (a2 : b2) = (a1 ++ " " ++ a2) : juntaLinhas b1 b2-- Questao 05-- [ ] !! int concatena com a lista com o int-- recebe numeros de ate tres digitostoLcd :: Int -> StringtoLcd n = showLinhas (toLcd2 n)toLcd1 :: Int -> IO( )toLcd1 n = putStr (showLinhas (toLcd2 n))toLcd2 :: Int -> [Linha]toLcd2 n | n <= 9 = toLcdAux n | n <= 99 = juntaLinhas (toLcd2 (div n 10)) (toLcd2 (mod n 10)) | n <= 999 = juntaLinhas (toLcd2 (div n 100)) (toLcd2 (mod n 100)) | otherwise = error "Garotinho so eh permitido numeros de tres digitos"toLcdAux :: Int -> [Linha]toLcdAux n = toLinhas (toString (numeros !! n)) numeros :: [[Int]]numeros = [zero,um,dois,tres,quatro,cinco,seis,sete,oito,nove]-- Questao 06--toCompact :: String -> [Int]--toCompact numeroPelo monitor Jaime Freire Falta a questao 06 que ainda tentarei fazer. Respostas do capitulo 02 do Livro Introducao ao HaskellAutores: Stenio Longo Araujo Benedito Melo Aciolyimport Data.Char-- EXEMPLOS------------------------------------------------------------------------------------------------------ Objetivo: Calcular a funcao nAnd ----------------------------------------------------------------------------------------------------nAnd :: Bool -> Bool -> BoolnAnd p q = not (p && q)------------------------------------------------------------------------------------------------------ Objetivo: -- Verificar se um caracter e MAIUSCULO;-- Verificar se um caracter e minusculo.-- letra para teste entre ' '----------------------------------------------------------------------------------------------------ehMaiuscula :: Char -> BoolehMaiuscula ch = ('A' <= ch) && (ch <= 'Z') ehMinuscula :: Char -> BoolehMinuscula ch = ('a' <= ch) && (ch <= 'z') ------------------------------------------------------------------------------------------------------ Objetivo: Concatenar tres strings -- palavras