Free Palestine 🍉 Stop the Genocide
Haskell Logo

Programação Funcional

Questão 41: insereMSet

Voltar

Considere que se usa o tipo [(a,Int)] para representar multi-conjuntos de elementos de a. Considere ainda que nestas listas não há pares cuja primeira componente coincida, nem cuja segunda componente seja menor ou igual a zero.

Defina a função insereMSet :: Eq a => a -> [(a,Int)] -> [(a,Int)] que acrescenta um elemento a um multi-conjunto.

Exemplo

> insereMSet ’c’ [(’b’,2), (’a’,4), (’c’,1)]
[(’b’,2),(’a’,4), (’c’,2)]

Resolução

Clica para revelar

insereMSet :: Eq a => a -> [(a,Int)] -> [(a,Int)]
insereMSet x [] = [(x,1)]
insereMSet x ((a,n):xs) = if x == a then (a,n+1) : xs else (a,n) : insereMSet x xs