Respostas do capitulo 02 do Livro Introducao ao HaskellAutores: Stenio Longo Araujo Benedito Melo AciolyOBS: Nao possui a resposta dos exercicios numero 08 e 09 -- EXEMPLOS------------------------------------------------------------------------------------------------------ Objetivo: Calcular o fatorial de um numero----------------------------------------------------------------------------------------------------fat :: Int -> Intfat a | a == 0 = 1 | a > 0 = a * fat (a - 1) ------------------------------------------------------------------------------------------------------ Objetivo: Realizar contagem dos acessos totais ate aquela semana----------------------------------------------------------------------------------------------------acessoTotal :: Int -> IntacessoTotal n | n == 0 = numAcesso 0 | otherwise = acessoTotal (n - 1) + numAcesso n ------------------------------------------------------------------------------------------------------ Objetivo: Auxiliar na contagem de acessos----------------------------------------------------------------------------------------------------numAcesso :: Int -> IntnumAcesso n | n == 0 = 15 | n == 1 = 5 | n == 2 = 7 | n == 3 = 18 | n == 4 = 7 | n == 5 = 0 | n == 6 = 5 | otherwise = 0 ------------------------------------------------------------------------------------------------------ Objetivo: Calcular o fatorial de um numero usando casamento padrao----------------------------------------------------------------------------------------------------fatcp :: Int -> Intfatcp 0 = 1fatcp b = b * fat (b - 1)------------------------------------------------------------------------------------------------------ Objetivo: Testar se um numero e 0 ou nao----------------------------------------------------------------------------------------------------ehZero :: Int -> BoolehZero 0 = TrueehZero _ = False-- EXERCICIOS------------------------------------------------------------------------------------------------------ Objetivo: Testar eficiencia do fatorial----------------------------------------------------------------------------------------------------fat2 :: Int -> Intfat2 n = fatAcum 1 n------------------------------------------------------------------------------------------------------ Objetivo: Auxiliar funcao fat2----------------------------------------------------------------------------------------------------fatAcum :: Int -> Int -> IntfatAcum ac n | (n == 0) = ac | (n > 0) = fatAcum (ac * n) (n - 1) ------------------------------------------------------------------------------------------------------ Objetivo: Calcular potencia de numero----------------------------------------------------------------------------------------------------pot :: Int -> Int -> Int pot l b | b == 0 = 1 | b == 1 = l | b > 1 = l * pot l (b - 1) ------------------------------------------------------------------------------------------------------ Objetivo: Calcular a soma de todos os numeros pares num intervalo ---------------------------------------------------------------------------------------------------somaPares :: Int -> IntsomaPares n | n == 0 = 0 | n == 1 = 0 | mod n 2 == 0 = n + (n - 2)------------------------------------------------------------------------------------------------------ Objetivo: Somar naturais utilizando funcao sucessor-- succ ja e uma funcao definda no pacote da linguagem--------------------------------------------------------------------------------------------------- soma :: Int -> Int -> Intsoma l 0 = lsoma 0 b = bsoma l b | l < b = succ (soma (l - 1) b) | otherwise = succ (soma l (b - 1)) ------------------------------------------------------------------------------------------------------ Objetivo: Soma de fracionarios---------------------------------------------------------------------------------------------------somaFra :: Float -> FloatsomaFra l | l == 0 = 0 | l == 1 = 1 | l > 1 = 1/l + somaFra (l - 1)------------------------------------------------------------------------------------------------------ Objetivo: Calcular a potencia de um numero diividido pelo fatorial do mesmo--------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------ Objetivo: Questao anterior organizada em tabela---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Objetivo: Algoritmo de Euclides ---------------------------------------------------------------------------------------------------- euclides :: Int -> Int -> Inteuclides l 0 = l euclides l b = euclides b (mod l b)------------------------------------------------------------------------------------------------------ Objetivo: Realizar o somatorio ----------------------------------------------------------------------------------------------------somatorio :: Int -> Intsomatorio 1 = 1somatorio n = (n*n) + somatorio(n-1) somatorio2 :: Int -> Intsomatorio2 1 = 1somatorio2 n = fat(n) + somatorio(n-1) ------------------------------------------------------------------------------------------------------ Objetivo: Realizar a tabuada----------------------------------------------------------------------------------------------------tabuada :: Int -> Stringtabuada l = valoresImpressos l 10valoresImpressos :: Int -> Int -> StringvaloresImpressos l 1 = resultadoFinal l 1valoresImpressos l b= valoresImpressos l (b-1) ++ resultadoFinal l b