Advertisement
Guest User

Untitled

a guest
Dec 16th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  1. --1
  2. data Dom a = Empty
  3. | Full
  4. | Ran a a
  5. | (Dom a) :|: (Dom a)
  6. | (Dom a) :&: (Dom a)
  7. deriving (Show,Read,Eq,Ord)
  8. --2
  9. exist :: Ord a => a -> Dom a -> Bool
  10. exist x Empty = False
  11. exist x Full = True
  12. exist x (Ran a b) = a <= x && x <= b
  13. exist x (a :|: b) = exist x a || exist x b
  14. exist x (a :&: b) = exist x a && exist x b
  15. --3
  16. overlap :: Ord a => Dom a -> Dom a-> Bool
  17. overlap (Ran a b) (Ran c d) = (b >= c && a <= c) || (a >= c && d >= a) ||
  18. (a >= c && b <= d) || (c >= a && d <= b)
  19. overlap Empty (Ran a b) = False
  20. overlap Full (Ran a b) = True
  21. overlap (Ran a b) Empty = False
  22. overlap (Ran a b) Full = True
  23. --4
  24. normalize :: Dom a -> Dom a
  25. normalize Empty = Empty
  26. normalize Full = Full
  27. normalize (Ran a b) = (Ran a b)
  28.  
  29. normalize (c :|: (a :&: b)) = (normalize (c :|: a)) :&: (normalize c :|: b)
  30. normalize ((a :&: b) :|: c) = (normalize (a :|: c)) :&: (normalize b :|: c)
  31. normalize (a :|: b ) = normalize a :|: normalize b
  32.  
  33. normalize ((a :|: b) :&: c) = (normalize (a :&: c)) :|: (normalize b :&: c)
  34. normalize (c :&: (a :|: b)) = (normalize (c :&: a)) :|: (normalize c :&: b)
  35. normalize (a :&: b) = (normalize a) :&: (normalize b)
  36. --5
  37. newtype SDom a = S (Dom a) deriving Show
  38. newtype PDom a = P (Dom a) deriving Show
  39.  
  40. instance Monoid (SDom a) where
  41. mempty = S Empty
  42. mappend (S x) (S y) = S (x :|: y)
  43.  
  44. instance Monoid (PDom a) where
  45. mempty = P Full
  46. mappend (P x) (P y) = P (x :&: y)
  47. --6
  48. optimize :: Ord a => Dom a -> Dom a
  49. optimize ((Ran a b) :|: Empty) = (Ran a b)
  50. optimize ((Ran a b) :&: Empty) = (Ran a b)
  51. optimize ((Ran a b) :|: Full) = (Ran a b)
  52. optimize ((Ran a b) :&: Full) = (Ran a b)
  53.  
  54. optimize (Empty :|: (Ran a b)) = (Ran a b)
  55. optimize (Empty :&: (Ran a b)) = (Ran a b)
  56. optimize (Full :|: (Ran a b)) = (Ran a b)
  57. optimize (Full :&: (Ran a b)) = (Ran a b)
  58.  
  59. optimize ((Ran a b) :&: (Ran c d)) = --intersectie
  60. if not (overlap (Ran a b) (Ran c d)) then (Ran a b) :&: (Ran c d)
  61. else if (a <= c && b <= d) then (Ran c b)
  62. else if (a >= c && b <= d) then (Ran a b)
  63. else if (a >= c && b >= d) then (Ran a d)
  64. else (Ran c d) --(a <= c && b >= d)
  65.  
  66. optimize ((Ran a b) :|: (Ran c d)) = --reuniune
  67. if not (overlap (Ran a b) (Ran c d)) then (Ran a b) :|: (Ran c d)
  68. else if (a <= c && b <= d) then (Ran a d)
  69. else if (a >= c && b <= d) then (Ran c d)
  70. else if (a >= c && b >= d) then (Ran c b)
  71. else (Ran a b) --(a <= c && b >= d)
  72. --7
  73. {-
  74. data MyList a =
  75. Null
  76. | Elem a
  77. | MyList a :++: MyList a
  78. deriving Show
  79.  
  80. add :: a -> MyList a -> MyList a
  81. add x xs = Elem x :++: xs
  82.  
  83. myList :: MyList Int
  84. myList = add 1 $ add 2 $ add 3 $ add 4 $ add 5 Null
  85.  
  86. foldrZ :: (a -> b -> b) -> b -> MyList a -> b
  87. foldrZ f e Null = e
  88. foldrZ f e (Elem x) = f x e
  89. foldrZ f e (xs :++: ys) = foldrZ f (foldrZ f e ys) xs
  90.  
  91. instance Foldable MyList where
  92. foldr = foldrZ
  93. -}
  94.  
  95. data DomF a = Empty -- interval vid (multimea vida)
  96. | Ran a a -- interval inchis [a,b]
  97. | (DomF a) :|: (DomF a) -- reuniunea a 2 intervale A U B
  98. deriving Show
  99.  
  100. foldDom :: (a -> b -> b) -> b -> DomF a -> b
  101. foldDom f e d = faux d e
  102. where faux Empty e = e
  103. faux (Ran x y) e = f x (f y e)
  104. faux (x :|: y) e = faux y (faux x e)
  105.  
  106. instance Foldable MyList where
  107. foldr = foldDom
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement