Advertisement
Tvor0zhok

Лабораторная №2 Haskell

Mar 1st, 2021 (edited)
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.14 KB | None | 0 0
  1. -------------------------------------
  2. ---------------ЧАСТЬ 1---------------
  3. -------------------------------------
  4.  
  5. -- Задача №1
  6.  
  7. --1-ый способ:
  8. fun11 :: Int -> [Int]
  9. fun11 n = [1..n]
  10.  
  11. --2-ой способ:
  12. fun12 :: Int -> [Int]
  13. fun12 0 = []
  14. fun12 n = fun12 (n - 1) ++ [n]
  15.  
  16. -- Задача №2
  17.  
  18. --1-ый способ:
  19. fun21 :: Int -> [Int]
  20. fun21 n = [1, 3..2*n]
  21.  
  22. --2-ой способ:
  23. fun22 :: Int -> [Int]
  24. fun22 n = filter odd [1..2*n]
  25.  
  26. --3-ий способ:
  27. fun23 :: Int -> [Int]
  28. fun23 n = map ( (+(-1)) . (*2) ) [1..n]
  29.  
  30. --4-ый способ:
  31. fun24 :: Int -> [Int]
  32. fun24 n = [2*x - 1 | x <- [1..n]]
  33.  
  34. --5-ый способ:
  35. fun25 :: Int -> [Int]
  36. fun25 n = filter odd $ helper (2*n)
  37. where helper 0 = []
  38. helper n = helper (n - 1) ++ [n]
  39.  
  40. --6-ой способ:
  41. fun26 :: Int -> [Int]
  42. fun26 n
  43. | n == 0 = []
  44. | odd n = fun26 (n - 1) ++ [n]
  45. | otherwise = fun26 (n - 1)
  46.  
  47. -- Задача №3
  48.  
  49. --1-ый способ:
  50. fun31 :: Int -> [Int]
  51. fun31 n = [2, 4..2*n]
  52.  
  53. --2-ой способ:
  54. fun32 :: Int -> [Int]
  55. fun32 n = filter even [1..2*n]
  56.  
  57. --3-ий способ:
  58. fun33 :: Int -> [Int]
  59. fun33 n = map (*2) [1..n]
  60.  
  61. --4-ый способ:
  62. fun34 :: Int -> [Int]
  63. fun34 n = [2*x | x <- [1..n]]
  64.  
  65. --5-ый способ:
  66. fun35 :: Int -> [Int]
  67. fun35 n = filter even $ helper (2*n)
  68. where helper 0 = []
  69. helper n = helper (n - 1) ++ [n]
  70.  
  71. --6-ой способ:
  72. fun36 :: Int -> [Int]
  73. fun36 n
  74. | n == 0 = []
  75. | even n = fun36 (n - 1) ++ [n]
  76. | otherwise = fun36 (n - 1)
  77.  
  78. -- Задача №4
  79.  
  80. --1-ый способ:
  81. fun41 :: Int -> [Int]
  82. fun41 n = map (^2) [1..n]
  83.  
  84. --2-ой способ:
  85. fun42 :: Int -> [Int]
  86. fun42 n = [x^2 | x <- [1..n]]
  87.  
  88. --3-ий способ:
  89. fun43 :: Int -> [Int]
  90. fun43 0 = []
  91. fun43 n = fun43 (n - 1) ++ [n^2]
  92.  
  93. -- Задача №5
  94.  
  95. --1-ый способ:
  96. fun51 :: Int -> [Int]
  97. fun51 n = [product[1..x] | x <- [1..n]]
  98.  
  99. --2-ой способ:
  100. fun52 :: Int -> [Int]
  101. fun52 n = take n $ iterate (\x -> product[1..x]) 1
  102.  
  103. --3-ий способ:
  104. fun53 :: Int -> [Int]
  105. fun53 n = map factorial [1..n] -- map (\x -> product [1..x]) [1..n]
  106. where factorial x = product [1..x] --можно было описать анонимную функцию, как и во 2-ом способе
  107.  
  108. --4-ый способ:
  109. fun54 :: Int -> [Int]
  110. fun54 0 = []
  111. fun54 n = fun54 (n - 1) ++ [factorial]
  112. where factorial = product [1..n]
  113.  
  114. -- Задача №6
  115.  
  116. --1-ый способ:
  117. fun61 :: Int -> [Int]
  118. fun61 n = [2^x | x <- [1..n]]
  119.  
  120. --2-ой способ:
  121. fun62 :: Int -> [Int]
  122. fun62 n = take n $ iterate(*2) 1
  123.  
  124. --3-ий способ:
  125. fun63 :: Int -> [Int]
  126. fun63 n = map degree [1..n] -- map (\x -> 2^x) [1..n]
  127. where degree x = 2^x --можно было описать анонимную функцию
  128.  
  129. --4-ый способ:
  130. fun64 :: Int -> [Int]
  131. fun64 0 = []
  132. fun64 n = fun64 (n - 1) ++ [degree]
  133. where degree = 2^n
  134.  
  135. -------------------------------------
  136. ---------------ЧАСТЬ 2---------------
  137. -------------------------------------
  138.  
  139. -- Задача №1
  140. fun1 :: [Float] -> Float
  141. fun1 x = uncurry (/) (helper x)
  142. where helper [] = (0, 0)
  143. helper x = sumPair (head x, 1) (helper $ tail x)
  144. sumPair (a, b) (c, d) = (a + c, b + d)
  145.  
  146. -- Задача №2
  147.  
  148. --1-ый способ:
  149. fun21 :: [a] -> Int -> a
  150. fun21 x n = x !! (n - 1)
  151.  
  152. --2-ой способ:
  153. fun22 :: [a] -> Int -> a
  154. fun22 x 1 = head x
  155. fun22 x n = (fun22 $ tail x) (n - 1)
  156.  
  157. -- Задача №3
  158.  
  159. --1-ый способ:
  160. fun31 :: Num a => [a] -> [a] -> [a]
  161. fun31 = zipWith (+)
  162.  
  163. --2-ой способ:
  164. fun32 :: Num a => [a] -> [a] -> [a]
  165. fun32 [] [] = []
  166. fun32 [] y = head y : fun32 [] (tail y)
  167. fun32 x [] = head x : fun32 (tail x) []
  168. fun32 x y = head x + head y : fun32 (tail x) (tail y)
  169.  
  170. -- Задача №4
  171. fun4 :: [a] -> [a]
  172. fun4 [] = []
  173. fun4 [a] = [a]
  174. fun4 x = [head $ tail x, head x] ++ fun4 (tail $ tail x)
  175.  
  176. --Задача №5
  177. tpowpow :: Int -> Int -> Int
  178. tpowpow a 0 = 1
  179. tpowpow a n = if odd n then a * tpowpow (a^2) (div n 2) else tpowpow (a^2) (div n 2)
  180.  
  181. --Задача №6
  182. removeOdd :: [Int] -> [Int]
  183. removeOdd = filter even
  184.  
  185. --Задача №7
  186.  
  187. --1-ый способ:
  188. removeEmpty1 :: [String] -> [String]
  189. removeEmpty1 = filter (/= "")
  190.  
  191. --2-ой способ:
  192. removeEmpty2 :: [String] -> [String]
  193. removeEmpty2 s = [x | x <- s, x /= ""]
  194.  
  195. --Задача №8
  196.  
  197. --1-ый способ:
  198. countTrue1 :: [Bool] -> Int
  199. countTrue1 s = sum $ map (\i -> if i then 1 else 0) s
  200.  
  201. --2-ой способ:
  202. countTrue2 :: [Bool] -> Int
  203. countTrue2 [] = 0
  204. countTrue2 (x : xs)
  205. | x = 1 + countTrue2 xs
  206. | otherwise = countTrue2 xs
  207.  
  208. --Задача №9
  209. makePositive :: Num a => [a] -> [a]
  210. makePositive = map abs
  211.  
  212. --Задача №10
  213.  
  214. --1-ый способ:
  215. delete1 :: Char -> String -> String
  216. delete1 a = filter (/= a)
  217.  
  218. --2-ой способ:
  219. delete2 :: Char -> String -> String
  220. delete2 a s = [x | x <- s, x /= a]
  221.  
  222. --Задача №11
  223. substitute :: Char -> Char -> String -> String
  224. substitute a b = map (\x -> if x == a then b else x)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement