Advertisement
Arina0904

Практика 23.11

Nov 23rd, 2022 (edited)
1,054
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --1 Напишите ф-ю, рез-т кот-ой: а)[2, 4, 5, 3, 2]; б) [2, 5]
  2. import Control.Monad
  3. fs = [\x -> 2*x, \x -> 3+x, \x -> 4-x]
  4. as = [1, 2]
  5.  
  6. --а)
  7. f1 = [a $ b | a <- fs, b <- as]
  8. --б)
  9. f2 = zipWith ($) fs as
  10. --в терминале: fs <*> as
  11. mf = Just (\x -> x / 0)
  12. ma :: Maybe Double
  13. ma = Just 6
  14.  
  15. --2 foldr f ini [x1, x2, x3] == (x1 `f` (x2 `f` (x3 `f` ini)))
  16. -- (f x1 (f x2 (f x3 ini)))
  17. --3 foldl f ini [x1, x2, x3] == (((ini `f` x1) `f` x2) `f` x3)
  18.  
  19. --Класс типов Foldable
  20. -- class Foldable where
  21. --     foldr :: (a -> b -> b) -> b -> t a -> b
  22. --     foldr :: (b -> a -> b) -> b -> t a -> b
  23. --
  24. -- instance Foldable [] where
  25. --     foldr f ini [] = ini
  26. --     foldr f ini (x:xs) = f x (foldr f ini xs)
  27. --    
  28. --     foldl f ini [] = ini
  29. --     foldl f ini (x:xs) = foldl f (f ini x) xs
  30. --    
  31. -- instance Foldable Maybe where
  32. --     foldr _ ini Nothing = ini
  33. --     foldr f ini (Just x) = f x ini
  34. --    
  35. --     foldl _ ini Nothing = ini
  36. --     foldl f ini (Just x) = f ini x
  37.  
  38. --4
  39. -- *Main> foldr (*) 3 (Just 14)
  40. -- 42
  41. -- *Main> foldl (-) 3 Nothing
  42. -- 3
  43. -- *Main> foldl (-) 3 (Just 14)
  44. -- -11
  45. -- *Main> foldr (-) 3 (Just 14)
  46. -- 11
  47.  
  48. -- *Main> foldr (*) 2 (13, 14)
  49. -- 28
  50. -- *Main> foldl (*) 3 (Right 14)
  51. -- 42
  52. -- *Main> foldl (*) 3 (Left 14)
  53. -- 3
  54.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement