Skip to content

Instantly share code, notes, and snippets.

@jeffque
Last active August 23, 2024 09:58
Show Gist options
  • Save jeffque/8091d1b0cac4ca85f64e87eecf805ee5 to your computer and use it in GitHub Desktop.
Save jeffque/8091d1b0cac4ca85f64e87eecf805ee5 to your computer and use it in GitHub Desktop.
Uma demonstração da estrutura de dados "mapa"
data Resultado = Vazio | Valor Integer
type Mapeamento = (Integer -> Resultado)
showResultado :: Resultado -> String
showResultado Vazio = "Vazio"
showResultado (Valor v) = "Valor " ++ (show v)
instance Show Resultado where
show = showResultado
addMe :: Integer -> Integer -> Integer
addMe x y = x + y
mapeamentoVazio :: Mapeamento
mapeamentoVazio _ = Vazio
adicionaMapeamento :: Mapeamento -> Integer -> Integer -> Mapeamento
adicionaMapeamento m k v x = if (x == k) then Valor v else m x
removeMapeamento :: Mapeamento -> Integer -> Mapeamento
removeMapeamento m k x = if (x == k) then Vazio else m x
main :: IO ()
main = do
let segundoMap = adicionaMapeamento (mapeamentoVazio) 1 2
print (segundoMap 0)
print (segundoMap 1)
print (segundoMap 2)
let terceiroMap1 = adicionaMapeamento (segundoMap) 1 10
print (terceiroMap1 0)
print (terceiroMap1 1)
print (terceiroMap1 2)
let terceiroMap2 = adicionaMapeamento (segundoMap) 2 20
print (terceiroMap2 0)
print (terceiroMap2 1)
print (terceiroMap2 2)
let quartoMap = removeMapeamento (terceiroMap2) 1
print (quartoMap 0)
print (quartoMap 1)
print (quartoMap 2)
@jeffque
Copy link
Author

jeffque commented Aug 23, 2024

Implementando conforme descrita em https://computaria.gitlab.io/blog/2023/08/21/java-map-stateless , em Haskell; operações:

  • resgatar
  • adicionar mapeamento
  • remover mapeamento

Não houve no momento preocupação com o domínio da função, só realmente o mapeamento

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment