livro texto (cap 7)
import Data.Char (toLower)
soma1 [] x = [(x,1)]
soma1 ((ch,v):ls) x
| x==ch = (ch,v+1):ls
| otherwise = (ch,v):(soma1 ls x)
vogalmaiscomum str = snd $ maximum $
map (\ (a,b) -> (b,a)) $ foldl soma1 [] $
filter (`elem` "aeiou") $ map toLower str
import Data.List -- tudo !!!
import Data.List (nub,sort) -- apenas
import qualified Data.List as DL -- qualificado
DL.sort
De uma olhada em Data.List
fold, map, filter, elem
, etc
sum, maximum
!!
- acesso a um elemento (indexado apartir do 0)
zip, zipWith
lines
- divide um stringão em linhas
words
- divide um string em palavras (igual ao split() do python)
unlines e unwords
- inverso das funcoes acima
sort
nub
- remove duplicadas, partition
sortBy
deleteBy
groupBy
nubBy
operações em conjuntos: union
, //
(set difference) etc
dicionários (implementados como lista balanceados, e tempo de acesso = O(log n)
empty
- dicionario vazio
fromList :: Ord k => [(k, a)] -> Map k a
lista de duplas para um dicionário
fromListWith :: Ord k => (a -> a -> a) -> [(k, a)] -> Map k a
o primeiro argumento é uma função que combina 2 valores que tiverem a mesma chave
insert Ord k => k -> a -> Map k a -> Map k a
insere num dicionário
insertWith
- função de combinação entre valor velho e novo.
Insert with a function, combining new value and old value. insertWith f key value mp will insert the pair (key, value) into mp if key does not exist in the map. If the key does exist, the function will insert the pair (key, f new_value old_value).
delete Ord k => k -> Map k a -> Map k a
lookup :: Ord k => k -> Map k a -> Maybe a
(a ser discutido na aula que vem)
member Ord k => k -> Map k a -> Bool
Retorna um booleano
map :: (a -> b) -> Map k a -> Map k b
map nos valores
mapWithKey :: (k -> a -> b) -> Map k a -> Map k b
map que recebe o valore da chave
elems :: Map k a -> [a]
keys :: Map k a -> [k]
foldr
e foldl
funciona (com valores)
import qualified Data.Map.Strict as Map
insertWith :: Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
soma1 dic ch = Map.insertWith (+) ch 1 dic
https://www.haskell.org/hugs/pages/libraries/base/Data-Char.html