Nesta última aula prática com Haskell, nosso objetivo é usar recursão e pattern matching.
Esta prática supõe que você já tenha feito as práticas anteriores. Também requer que você tenha consultado o material sobre recursão e pattern matching (slides | vídeo) e os exemplos de recursão (slides | vídeo).
Clique aqui para criar seu repositório desta prática de Haskell: https://classroom.github.com/a/kMtlvA55
Lembre sempre de fazer commit e push para que seus exercícios sejam enviados para o GitHub.
Os exercícios abaixo não precisam ser entregues. São apenas um aquecimento.
-
Qual será o resultado das seguintes operações em Haskell? (procure deduzir antes de testar no interpretador)
> 2:[4,6] > 36:49:[] > [2]:[3]:[5]:[7]:[] > '0':"1010" > (2,4):[(3,9)] > "No":["Problem"]
-
As operações abaixo retornam erro no GHCi. Você consegue identificar os motivos?
> 'a':[2,3] > 1:2:3:[[]] > "abra":"cadabra" > (5,25):[6,36]
-
A função recursiva abaixo usa o operador de construção de lista (
:
). O que faz esta função?deduzame :: [Integer] -> [Integer] deduzame [] = [] deduzame lst = (2 * head lst) : deduzame (tail lst)
-
A função recursiva abaixo também usa o operador ':'. Deduza o que faz esta função.
deduzame2 :: [Integer] -> [Integer] deduzame2 [] = [] deduzame2 lst = if (head lst) > 2 then head lst : deduzame2 (tail lst) else deduzame2 (tail lst)
Entregue os exercícios abaixo no arquivo haskell06.hs
. Você deverá criar este arquivo no repositório de entrega.
-
Escreva uma função
ends :: [Int] -> [Int]
que receba uma lista e retorne outra lista contendo o primeiro e o último elementos da primeira lista. Use o operador de construção de lista (:
). -
Reescreva a função
deduzame
do Aquecimento usando a notação(x:xs)
para representar a listalst
. Ajuste o restante do código da função. Você verá que o código ficará mais enxuto. -
Reescreva também a função
deduzame2
do Aquecimento, usando a notação(x:xs)
para representar a listalst
. -
Usando recursão, escreva uma função
geraTabela :: Int -> [(Int,Int)]
que produza uma lista comn
tuplas, cada tupla com números den
a1
e seus respectivos quadrados. Exemplo:> geraTabela 5 [(5,25),(4,16),(3,9),(2,4),(1,1)] > geraTabela 0 []
-
Defina uma função recursiva que verifique se um dado caracter está contido numa string, conforme os exemplos abaixo:
> contido 'e' "andrea" True > contido 'x' "andrea" False > contido 'a' "" False
Obs.: Neste exercício, não vale usar
elem
. Obs.: A tipagem da funçãocontido
é por sua conta! -
Defina uma função recursiva
translate
, que receba uma lista de coordenadas de pontos 2D e desloque esses pontos em 2 unidades. A tipagem da função é por sua conta! Confira o exemplo abaixo:> translate [(0.1,0.2),(1.1,6.0),(2.0,3.1)] [(2.1,2.2),(3.1,8.0),(4.0,5.1)]
-
Defina uma função recursiva
countLongs
, que receba uma lista de palavras e retorne a quantidade dessas palavras que tenham mais de 5 caracteres. A tipagem da função é por sua conta! Exemplo de uso:> countLongs ["limao", "banana", "pera", "maracuja"] 2
-
Defina uma função recursiva
onlyLongs :: [String] -> [String]
que receba uma lista de palavras e retorne outra lista somente com as palavras que tenham mais de 5 caracteres. Exemplo de uso:> onlyLongs ["limao", "banana", "pera", "maracuja"] ["banana","maracuja"]