Nesta aula, vamos continuar exercitando programação funcional em Haskell. Em especial, vamos praticar um pouco o uso de let..in e where.
Esta prática supõe que você já tenha feito as práticas anteriores. Também requer que você tenha consultado o material sobre let..in e where (slides | vídeo).
Vamos continuar usando o GHC disponível no Repl.it, ligado ao GitHub. Quem preferir pode instalar o GHC e o Git localmente e trabalhar em seu IDE favorito.
Clique aqui para criar seu repositório desta prática de Haskell: https://classroom.github.com/a/jVA0qEPt
Lembre sempre de fazer commit e push para que seus exercícios sejam enviados para o GitHub.
Entregue os exercícios abaix no arquivo haskell05.hs
. Você deverá criar este arquivo no repositório de entrega.
-
O Índice de Massa Corporal (IMC) é dado pelo peso dividido pela altura ao quadrado. Dependendo do valor resultante, um indivído adulto pode ser considerado abaixo do peso ideal (menor ou igual a 18.5), acima do peso ideal (maior ou igual a 30) ou dentro do peso normal (faixa intermediária). Sabendo disso, crie uma função
bmi :: Float -> Float -> String
que receba peso e altura e retorne um destes valores: "ABAIXO", "NORMAL" ou "ACIMA", dependendo do IMC calculado. Uselet..in
para declarar o cálculo do valor do IMC e aproveitá-lo em cada condição testada. -
Resolva o exercício anterior usando
where
. A assinatura da nova função serábmi' :: Float -> Float -> String
. -
O exemplo de validação de CPF mostrado nos slides/vídeo tem 3 funções: uma que faz I/O e outras 2 que tratam do cálculo do dígito verificador. A função
cpfValid
usalet..in
e a funçãocpfDV
usawhere
. Reescreva estas 2 funções, trocandolet..in
porwhere
e vice-versa. -
Crie uma função
andTable :: [(Bool, Bool, Bool)]
que gere uma tabela verdade para o operador AND lógico, com o seguinte resultado:> andTable [(True,True,True),(True,False,False),(False,True,False),(False,False,False)]
Cada tupla na lista representa valores lógicos da forma (p, q, p E q). Sua função não deve simplesmente copiar esta lista como resultado, mas sim gerá-la variando os valores e aplicando o operador.
Consulte as seções abaixo no livro Learn you a Haskell for Great Good!, de Miran Lipovača: