Lista de Exercícios: Haskell Avançado (Tipos e IO)¶
Esta página contém exercícios de fixação sobre tipos algébricos de dados (ADTs) e programação interativa (IO) em Haskell.
📕 Lista 4: Tipos Algébricos, Sinônimos e Pattern Matching¶
1. Sinônimos de tipos (type)¶
-
Crie um sinônimo de tipo
NomeparaStringeIdadeparaInt.Escreva uma função
apresenta :: Nome -> Idade -> Stringque retorne"Meu nome é X e tenho Y anos". -
Explique a diferença entre
typeenewtypeem Haskell. -
Crie um sinônimo de tipo
Pontopara(Float, Float).Escreva uma função
distancia :: Ponto -> Ponto -> Floatque calcule a distância euclidiana entre dois pontos.
2. Novos tipos (newtype)¶
-
Crie um
newtypechamadoDolarque envolveFloat.Escreva uma função
converterParaReal :: Dolar -> Floatconsiderando 1 Dólar = 5,50 BRL. -
Explique por que
newtypeé mais eficiente quedatapara tipos que envolvem um único construtor com um único campo.
3. Tipos algebricos (data)¶
-
Defina um tipo
DiaSemanacom os sete dias da semana.Escreva uma função
proximoDia :: DiaSemana -> DiaSemana. -
Defina um tipo
CorcomVermelho | Verde | Azul | Amarelo.Crie uma função
ehPrimaria :: Cor -> Boolque retorneTruese a cor for primária. -
Crie um tipo
FormacomCirculo Float | Retangulo Float Float | Quadrado Float.Escreva uma função
area :: Forma -> Floatque calcule a área de qualquer forma. -
Crie um tipo
ContacomCorrente Float | Poupanca Float Float(saldo e juros).Escreva uma função
saldoTotal :: Conta -> Floatque retorne o saldo total considerando juros na poupança.
4. Pattern Matching¶
- Reescreva a função
areado exercício 8 usando pattern matching. - Escreva uma função
ehFimDeSemana :: DiaSemana -> Boolusando pattern matching. - Crie uma função
descricaoConta :: Conta -> Stringque descreva a conta ("Conta Corrente: R$..."ou"Conta Poupança: R$... com juros..."). - Escreva uma função
somaPontos :: Ponto -> Ponto -> Pontousando pattern matching em tuplas.
5. Funções que usam tipos algebricos¶
-
Crie um tipo
ResultadocomSucesso String | Erro String.Escreva uma função
processar :: Bool -> Resultadoque retorneSucesso "OK"seTrue, ouErro "Falha"seFalse. -
Crie um tipo
Expressaopara representar expressões matemáticas simples:Valor Int | Soma Expressao Expressao | Multiplicacao Expressao Expressao.Escreva uma função
avaliar :: Expressao -> Intque calcule o valor da expressão. -
Crie um tipo
OpcaocomSim | Nao | Talvez.Escreva uma função
resposta :: Opcao -> Stringque retorne"Aceito","Recuso"ou"Indeciso".
6. Exercícios mistos avançados¶
-
Crie um tipo
PessoacomNome StringeIdade Int.Escreva uma função
maiorIdade :: Pessoa -> Boolusando pattern matching. -
Crie um tipo
LivrocomTitulo String | Autor String | Ano Int.Escreva uma função
descricaoLivro :: Livro -> String. -
Defina um tipo
Arvore acomFolha a | No (Arvore a) (Arvore a).Escreva uma função
contaNos :: Arvore a -> Intque conte os nós de uma árvore. -
Escreva uma função
mapArvore :: (a -> b) -> Arvore a -> Arvore bque aplique uma função a todos os elementos da árvore.
📓 Lista 5: Entrada/Saída (IO) e Programação Interativa¶
https://profsergiocosta.notion.site/6-Programas-interativos-1d9441f881934142bba7ed420410e978
Parte 1 – Fundamentos de IO¶
-
Escreva um programa que leia um caractere do teclado e o imprima duas vezes na tela.
-
Crie um programa que leia dois caracteres e os imprima separados por um espaço.
-
Escreva uma versão simplificada do
putStrLn, chamadaputStrSimples, que recebe uma string e a imprime caractere por caractere, finalizando com\n.
Parte 2 – Lendo e escrevendo Strings¶
-
Implemente uma função que peça o nome do usuário e o cumprimente.
-
Escreva um programa que leia duas linhas do teclado e depois imprima a concatenação delas.
Parte 3 – Do notation¶
-
Reescreva o seguinte programa sem usar
do(usando>>=): -
Escreva um programa que peça a idade do usuário e diga se ele é maior de idade ou não.
Parte 4 – Manipulação de arquivos¶
- Escreva um programa que leia o conteúdo de um arquivo
"entrada.txt"e imprima na tela. - Crie uma função que copie o conteúdo de
"entrada.txt"para"saida.txt". - Adapte o programa de remoção de stopwords (do exemplo) para que o nome dos arquivos de entrada e saída seja pedido ao usuário via teclado.
Parte 5 – Desafios¶
- Implemente um programa que conte quantas linhas existem em um arquivo de texto.
- Escreva uma função
mainque:- pergunte ao usuário um número
n, - leia uma lista de números de um arquivo,
- some apenas os
nprimeiros números, - grave o resultado em outro arquivo.
- pergunte ao usuário um número
- Escreva um mini “chat”: o programa deve ler uma linha do usuário e imprimir de volta a mesma linha em maiúsculas até que ele digite
"sair".