UFSM > Informática > ELC117 - Paradigmas de Programação

Preparação

Para este exercício você vai precisar do GHC (Glasgow Haskell Compiler), que é composto por um compilador e um interpretador para Haskell. Ele está disponível para várias plataformas em http://hackage.haskell.org/platform/. O exemplo abaixo mostra como invocar o interpretador do GHC no Linux:

user@host:~$ ghci
GHCi, version 7.0.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
Prelude> 

Comandos básicos do GHCi

Exercícios básicos

  1. (Funções simples) Qual será o resultado de cada função abaixo? Verifique sua resposta usando o interpretador.

    min 16 8
    max 100 101
    succ 10
    succ 5 * 4
    succ (5 * 4)
    "abra" ++ "cadabra"
    

  2. (Funções com listas) Qual será o resultado de cada função abaixo? Verifique sua resposta usando o interpretador.

    ["abacaxi", "laranja", "uva"] !! 0
    ["abacaxi", "laranja", "uva"] !! 1
    ["abacaxi", "laranja", "uva"] !! 2
    ["abacaxi", "laranja", "uva"] !! 3
    

  3. (Funções com listas) Qual será o resultado de cada função abaixo? Verifique sua resposta usando o interpretador. Veja aqui uma explicação ilustrada destas funções :-)

    head [1,2,3,4,5]
    tail [1,2,3,4,5]
    last [1,2,3,4,5]
    init [1,2,3,4,5]
    

  4. (Funções com listas) Qual será o resultado de cada função abaixo? Verifique sua resposta usando o interpretador.

    head []
    null [1,2,3]
    null []
    take 3 [1,2,3,4,5]
    take 1 [3,6,9]
    take 5 [1,2]
    take 5 ['a'..'z']
    take 0 [1,2,3]
    drop 3 [1,2,3,4,5]
    drop 3 ['A'..'Z']
    drop 0 [1,2,3,4,5]
    drop 100 [1,2,3,4,5]
    length [1,0,0,1,0]
    maximum [4,7,1,9,4,0]
    minimum [4,7,1,9,4,0]
    length "abracadabra"
    elem 4 [1,2,3,4]
    elem 5 [1,2,3,4]
    4 `elem` [1,2,3,4]
    

Programando em Haskell

  1. Baixe o programa first.hs. Abra-o em um editor e observe seu código.

  2. Carregue este programa no interpretador:

    Prelude> :l first.hs
    

  3. Teste as funções do programa, observando alguns erros que podem ocorrer:

    quadrado 5
    quadrado 5.0
    quadrado 5.
    addThreeInt 5 6 1
    addThreeInt 5 6
    addThreeInt 1 2.0 3
    addThreeFloat 1 2 3
    addThreeFloat 1 2.1 3
    superSizeMe 10
    
  4. Inclua uma função par :: Int -> Bool em first.hs, para verificar se um número inteiro é par ou ímpar. Use a função mod, que retorna o resto de uma divisão inteira (ex.: mod 5 2 retorna 1). Para testar a função você deve carregar novamente o arquivo first.hs.

  5. Inclua uma função somaLista em first.hs, para calcular o somatório de elementos de uma lista. Essa função encontra-se parcialmente definida abaixo. Você deve completar a parte marcada com "...". Use recursividade e lembre-se das funções head e tail.
    somaElem :: [Int] -> Int
    somaElem [] = 0
    somaElem lis = ...
    

  6. Observe a função addThree, que usa o conceito de typeclass (classe de tipo) em Haskell para funcionar com qualquer tipo numérico. Veja mais sobre typeclasses em: http://learnyouahaskell.com/types-and-typeclasses#typeclasses-101.

  7. A função superSizeMe em first.hs não tem tipo especificado. Altere o arquivo first.hs para incluir uma definição de tipo nesta função. Use o conceito de typeclass para que a função se aplique a qualquer tipo numérico.

Página criada em: Thu Mar 31 08:38:36 BRT 2011. Última atualização em: Wed Apr 27 11:44:50 2011. Autoria: Andrea Schwertner Charão.