ATE meia noite de 1/9
Assuma que um contador é implementado como uma lista de tuplas onde o primeiro elemento da tupla é a chave e o segundo a contagem relativa a chave.
A função soma1
implementada abaixo, dado uma chave e um contador (a lista) soma 1 na contagem relativa à chave no contador, ou inclui a chave na lista com contagem 1 se ela não tiver lista.
soma1 :: (Eq a) => a -> [(a,Int)] -> [(a,Int)]
soma1 ch [] = [(ch,1)]
soma1 ch ((a,n):ds)
| ch==a = (a,n+1):ds
| otherwise = (a,n):(soma1 ch ds)
Considere que letra é qualquer caracter que não o branco ( e coisas similares como o tab e o newline).
Implemente a função letramaiscomum
que dado um string retorna a letra mais comum no string que não o branco/space. Considerar que letras maiúsculas e minúsculas contam como a mesma letra. Se duas ou mais letras tem a mesma contagem, sua função pode retornar qualquer uma dessas letras.
Utilize alguma função de alto nivel: map, filter, fold, etc neste problema
que voce pode usar se quiser
toLower :: Char -> Char
que se o argumento é uma letra maiúscula retorna a minúscula correspondente, e se for minúscula, retorna ela própria. Para usar o toLower
use, import Data.Char (toLower)
no seu programa (assunto a próxima aula)
isSpace :: Char -> Bool
que retorna True se o caracter um é tipo branco (Space, tab etc). É preciso importar essa função do Data.Char
snd :: (a,b) -> b
retorna o 2o elemento de uma tupla de 2
maximum :: Ord a => [a] -> a
retorna o maior elemento de uma lista. Verifique o que ele faz para lista de tuplas.