tiagogilsousa

50 Haskell Function

Oct 25th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module Main where
  2.  
  3. -- Exercicio 1
  4. enumFromTo' :: Int -> Int -> [Int]
  5. enumFromTo' m n = if m > n then [] else m : enumFromTo' (m+1) n
  6.  
  7. enumFromTo'' :: Int -> Int -> [Int]
  8. enumFromTo'' m n
  9.     | m > n = []
  10.     | otherwise = m : enumFromTo'' (m+1) n
  11.  
  12. -- Exercicio 2
  13. enumFromThenTo' :: Int -> Int -> Int -> [Int]
  14. enumFromThenTo' x y z
  15.     | x > z = []
  16.     | otherwise = x : enumFromThenTo' y (y + (y-x)) z
  17.    
  18. -- Exercicio 3
  19. -- contact
  20. concatLista :: [a] -> [a] -> [a]
  21. concatLista [] ys = ys
  22. concatLista (xs:xss) l = xs : concatLista xss l
  23.  
  24. -- Exercicio 4
  25. last' :: [a] -> a
  26. last' [] = error "Lista vazia"
  27. last' [x] = x
  28. last' (x:xs) = last' xs
  29.  
  30.  
  31. -- Exercicio 5
  32. init' :: [a] -> [a]
  33. init' [a] = []
  34. init' (xs:xss) = xs : init' xss
  35.  
  36. -- Exercicio 6
  37. -- Devolve elemento x de uma lista
  38. devolveElemento :: [a] -> Int -> a
  39. devolveElemento (x:xs) i
  40.     | i == 0 = x
  41.     | otherwise = devolveElemento (xs) (i-1)
  42.  
  43. -- Exercicio 7
  44. -- inverter a ordem de uma lista
  45. inverte :: [a] -> [a]
  46. inverte [] = []
  47. inverte (x:xs) = (inverte xs) ++ [x]
  48.  
  49. -- Exercicio 8
  50. -- Obtem uma lista com o x primeiros elementos
  51. take' :: Int -> [a] -> [a]
  52. take' _ [] = []
  53. take' i (x:xs)
  54.     | i == 0 = xs
  55.     | otherwise = x : take' (i-1) xs
  56.  
  57. -- Exercicio 9
  58. -- drop
  59. drop' :: Int -> [a] -> [a]
  60. drop' _ [] = []
  61. drop' n (x:xs)
  62.     | n <= 0 = x:xs
  63.     | otherwise = drop' (n-1) xs
  64.  
  65. -- Exercicio 10
  66. -- constroi uma lista de pares a partir de duas listas
  67. zip' :: [a] -> [b] -> [(a, b)]
  68. zip' [] _ = []
  69. zip' _ [] = []
  70. zip' (x:xs) (y:ys) = (x,y): zip' xs ys
  71.  
  72. -- Exercicio 11
  73. -- Testa se um elemento esta na lista
  74. -- definicao recursiva de elem
  75. elem' :: Eq a => a -> [a] -> Bool
  76. elem' n [] = False
  77. elem' n (x:xs)
  78.     | n == x = True
  79.     | otherwise = elem' n xs
  80.  
  81. -- Exercicio 12
  82. -- Dado um elemento n e um inteiro x constroi constriu uma lista com n
  83. -- elementos todos iguais a x
  84. -- definicao recursiva de replicate
  85. replicate' :: Int -> a -> [a]
  86. replicate' n x
  87.     | n == 0 = []
  88.     | otherwise = x : replicate' (n-1) x
  89.    
  90. -- Exercicio 13
  91. -- intersperse
  92. intersperse' :: a -> [a] -> [a]
  93. intersperse' n [x] = [x]
  94. intersperse' n (x:xs) = x:n:(intersperse' n xs)
  95.  
  96. -- Exercicio 14
  97. group' :: Eq a => [a] -> [[a]]
  98. group' [] = []
  99. group' (x:xs) = (takeWhile (==x) xs) : group' (dropWhile (==x) xs)
  100.    
  101. group'' :: Eq a => [a] -> [[a]]
  102. group'' [] = []
  103. group'' (x:xs) = prefix : group'' suffix
  104.     where
  105.         head' = x
  106.         prefix = [ n | n <- (x:xs), n == head' ]
  107.         suffix = [ n | n <- (x:xs), n /= head' ]
  108.        
  109. -- Exercicio 15
  110. -- contact
  111. concat' :: [[a]] -> [a]
  112. concat' [] = []
  113. concat' (x:xs) = x ++ (concat' xs)
  114.  
  115. -- Exercicio 16
  116. -- inits
  117. inits' :: [a] -> [[a]]
  118. inits' [] = [[]]
  119. inits' (xs:xss) = inits' (init (xs:xss)) ++ [ xs:xss ]
  120.  
  121. -- Exercicio 17
  122. -- tails
  123. tails' :: [a] -> [[a]]
  124. tails' [] = [[]]
  125. tails' (xs:xss) = [(xs:xss)] ++ tails' (tail (xs:xss))
Add Comment
Please, Sign In to add comment