Confira exemplos de códigos na linguagem de programação Haskell.
Abaixo você confere exemplos de códigos em Haskell para aprendizado de programação funcional.
Você pode rodar o código abaixo copiando e colando em algum compilador de Haskell online, clicando aqui você encontra um.
fact:: Int -> Int
fact 0 = 1
fact n = n * fact(n-1)
potencia:: Int -> Int -> Int
potencia a b
| b > 0 = a * potencia a (b-1)
| otherwise = 1
somaImpares:: [Int] -> Int
somaImpares [] = 0
somaImpares (a:x)
| a `mod` 2 /= 0 = a + somaImpares x
| otherwise = 0 + somaImpares x
substituir:: Int -> Int -> [Int] -> [Int]
substituir a b [] = []
substituir a b (c:x)
| a == c = b: substituir a b x
| otherwise = c: substituir a b x
divisores:: Int -> Int -> [Int] -> [Int]
divisores 0 n x = x
divisores divisor n x
| n `mod` divisor /= 0 = divisores (divisor-1) n x
| otherwise = [divisor] ++ (divisores (divisor-1) n x)
primo:: Int -> Bool
primo n
| length(divisores n n []) == 2 = True
| otherwise = False
soma:: [Int] -> Int
soma [] = 0
soma (a:x) = a + soma x
perfeito:: Int -> Bool
perfeito n
| soma(divisores n n [])-n==n=True
| otherwise = False
binario:: Int -> [Int]
binario 0 = []
binario n
| n `mod` 2 == 1 = (binario (n `div` 2)) ++ [1]
| otherwise = (binario (n `div` 2)) ++ [0]
distintos3::[Int] -> Int -> Int
distintos3 [] num = 0
distintos3 (i:vet) num
|i == num = 1 + distintos3 vet num
|otherwise = 0 + distintos3 vet num
distintos2:: [Int] -> Int -> Bool
distintos2 vet pos
|pos == -1 = True
|otherwise = (1 == distintos3 vet (vet !! pos)) && distintos2 vet (pos-1)
distintos:: [Int] -> Bool
distintos [] = True
distintos vet = distintos2 vet ((length vet)-1)
disjunto:: Int -> [Int] -> Bool
disjunto _ [] = False
disjunto a (b:x)
| a == b = True
| otherwise = disjunto a x
disjuntas:: [Int] -> [Int] -> Bool
disjuntas [] [] = False
disjuntas [] y = True
disjuntas x [] = True
disjuntas (a:x) y
| disjunto a y == True = False
| otherwise = disjuntas x y
contrario:: [Int] -> [Int]
contrario [] = []
contrario (a:x) = contrario x ++ [a]
palindromo:: [Int] -> Bool
palindromo [] = True
palindromo x
| x == contrario x = True
| otherwise = False
somaParciais:: [Int] -> [Int]
somaParciais [] = []
somaParciais [a] = [a]
somaParciais x = (somaParciais (remove x)) ++ [(soma x)]
linearizar:: [[Int]] -> [Int]
linearizar [] = []
linearizar (a:x) = a ++ linearizar x
desloca:: [Int] -> [Int]
desloca [] = []
desloca (a:x) = x ++ [a]
shift:: Int -> [Int] -> [Int]
shift _ [] = []
shift 0 x = x
shift n x = (shift (n-1) (desloca x))
remove:: [Int] -> [Int]
remove [a] = []
remove (a:x) = [a] ++ remove x
removerFim:: Int -> [Int] -> [Int]
removerFim _ [] = []
removerFim 0 x = x
removerFim n x = (removerFim (n-1) (remove x))
intercalar:: [Int] -> [Int] -> [Int]
intercalar [] [] = []
intercalar (a:x) [] = [a] ++ intercalar x []
intercalar [] (b:y) = [b] ++ intercalar [] y
intercalar (a:x) (b:y)
| a>b = [b] ++ [a] ++ intercalar x y
| otherwise = [a] ++ [b] ++ intercalar x y
trocar:: Int -> [Int]
trocar val
|val >= 100 = trocar (val-100) ++ [100]
|val >= 50 = trocar (val-50) ++ [50]
|val >= 10 = trocar (val-10) ++ [10]
|val >= 1 = trocar (val-1) ++ [1]
|otherwise = []
main = do
print$ fact 4
print$ potencia 2 3
print$ somaImpares [1,3,2,7,4,6,5]
print$ substituir 1 0 [1,2,1,3,1]
print$ primo 17
print$ primo 0
print$ perfeito 28
print$ binario 20
print$ distintos [1,2,3,4,5]
print$ disjuntas [1,2,3] [5,4,6,0]
print$ palindromo [1,2,3,4,3,2,1]
print$ somaParciais [1,2,3,4]
print$ linearizar [[1,2],[5],[0,4,2]]
print$ shift 3 [1,5,6,7,3,4,1] -- k=3
print$ removerFim 2 [1,2,3,4,5,6] -- n=2
print$ intercalar [1,5,10] [2,7,9,20,25]
print$ trocar 162
A saída do programa para as entradas acima será a seguinte:
24
8
16
[0,2,0,3,0]
True
False
True
[1,0,1,0,0]
True
True
True
[1,3,6,10]
[1,2,5,0,4,2]
[7,3,4,1,1,5,6]
[1,2,3,4]
[1,2,5,7,9,10,20,25]
[1,1,10,50,100]
COMENTÁRIOS