Advertisement
Guest User

Untitled

a guest
Dec 18th, 2018
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. {-# LANGUAGE FlexibleContexts #-}
  2. data Array a = Leaf | Node Int (Array a) a (Array a) deriving Show
  3.  
  4. aempty = Leaf
  5.  
  6. --Pobranie skladowej o zadanym indeksie
  7. --asub Leaf 0 = Leaf
  8. asub Leaf _ = error "Element doesn't exist"
  9. asub (Node _ _ v _) 1 = v
  10. asub (Node _ left _ right) n =
  11.   if ((n `mod` 2)  == 0)
  12.   then (asub left ((n `div` 2)))
  13.   else (asub right ((n `div` 2)))
  14. ---------
  15.  
  16. --Modyfikacja skladowej o zadanym indeksie
  17. aupdate Leaf _ _ = error "Element doesn't exist"
  18. aupdate (Node d l v r) 1 nVal = Node d l nVal r
  19. aupdate (Node d l v r) n nVal =
  20.   if ((n `mod` 2) == 0)
  21.   then (Node d (aupdate l (n `div` 2) nVal) v r)
  22.   else (Node d l v (aupdate r (n `div` 2) nVal))
  23.  
  24. ------
  25.  
  26. --Rozszerzenie tablicy o jedna skladowa
  27. ahiext Leaf nV = Node 1 Leaf nV Leaf
  28. ahiext (Node maxI l v r) nV =
  29.   ahiext' (Node maxI l v r) nV (maxI+1) (maxI+1)
  30.  where
  31.    ahiext' Leaf nV max 1 = Node max Leaf nV Leaf
  32.     ahiext' (Node maxI left v right) nV max k =
  33.      if ((k `mod` 2) == 0)
  34.      then (Node max (ahiext' left nV max (k `div` 2)) v right)
  35.       else (Node max left v (ahiext' right nV max (k `div` 2)))
  36. ------
  37.  
  38. --Usuniecie skladowej o najwyzszym indeksie
  39. ahirem Leaf = error "Array is empty"
  40. ahirem (Node _ Leaf _ Leaf) = Leaf
  41. ahirem (Node i l v Leaf) = Node (i-1) (ahirem l) v Leaf
  42. ahirem (Node i Leaf v r) = Node (i-1) Leaf v (ahirem r)
  43. ahirem (Node i (Node idx1 l1 v1 r1) v (Node idx2 l2 v2 r2)) =
  44.  if (idx1 > idx2)
  45.  then (Node (i-1) (ahirem (Node idx1 l1 v1 r1)) v (Node idx2 l2 v2 r2))
  46.  else (Node (i-1) (Node idx1 l1 v1 r1) v (ahirem (Node idx2 l2 v2 r2)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement