Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {-# LANGUAGE FlexibleContexts #-}
- data Array a = Leaf | Node Int (Array a) a (Array a) deriving Show
- aempty = Leaf
- --Pobranie skladowej o zadanym indeksie
- --asub Leaf 0 = Leaf
- asub Leaf _ = error "Element doesn't exist"
- asub (Node _ _ v _) 1 = v
- asub (Node _ left _ right) n =
- if ((n `mod` 2) == 0)
- then (asub left ((n `div` 2)))
- else (asub right ((n `div` 2)))
- ---------
- --Modyfikacja skladowej o zadanym indeksie
- aupdate Leaf _ _ = error "Element doesn't exist"
- aupdate (Node d l v r) 1 nVal = Node d l nVal r
- aupdate (Node d l v r) n nVal =
- if ((n `mod` 2) == 0)
- then (Node d (aupdate l (n `div` 2) nVal) v r)
- else (Node d l v (aupdate r (n `div` 2) nVal))
- ------
- --Rozszerzenie tablicy o jedna skladowa
- ahiext Leaf nV = Node 1 Leaf nV Leaf
- ahiext (Node maxI l v r) nV =
- ahiext' (Node maxI l v r) nV (maxI+1) (maxI+1)
- where
- ahiext' Leaf nV max 1 = Node max Leaf nV Leaf
- ahiext' (Node maxI left v right) nV max k =
- if ((k `mod` 2) == 0)
- then (Node max (ahiext' left nV max (k `div` 2)) v right)
- else (Node max left v (ahiext' right nV max (k `div` 2)))
- ------
- --Usuniecie skladowej o najwyzszym indeksie
- ahirem Leaf = error "Array is empty"
- ahirem (Node _ Leaf _ Leaf) = Leaf
- ahirem (Node i l v Leaf) = Node (i-1) (ahirem l) v Leaf
- ahirem (Node i Leaf v r) = Node (i-1) Leaf v (ahirem r)
- ahirem (Node i (Node idx1 l1 v1 r1) v (Node idx2 l2 v2 r2)) =
- if (idx1 > idx2)
- then (Node (i-1) (ahirem (Node idx1 l1 v1 r1)) v (Node idx2 l2 v2 r2))
- 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