diff options
| author | aarne <aarne@cs.chalmers.se> | 2008-06-25 16:43:48 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2008-06-25 16:43:48 +0000 |
| commit | b96b36f43de3e2f8b58d5f539daa6f6d47f25870 (patch) | |
| tree | 0992334be13cec6538a1dea22fbbf26ad6bdf224 /src/GF/Data/OrdSet.hs | |
| parent | fe367412e0aeb4ad5c02de68e6eca382e0f96984 (diff) | |
removed src for 2.9
Diffstat (limited to 'src/GF/Data/OrdSet.hs')
| -rw-r--r-- | src/GF/Data/OrdSet.hs | 120 |
1 files changed, 0 insertions, 120 deletions
diff --git a/src/GF/Data/OrdSet.hs b/src/GF/Data/OrdSet.hs deleted file mode 100644 index 34eb0705d..000000000 --- a/src/GF/Data/OrdSet.hs +++ /dev/null @@ -1,120 +0,0 @@ ----------------------------------------------------------------------- --- | --- Module : OrdSet --- Maintainer : Peter Ljunglöf --- Stability : Obsolete --- Portability : Haskell 98 --- --- > CVS $Date: 2005/04/21 16:22:06 $ --- > CVS $Author: bringert $ --- > CVS $Revision: 1.6 $ --- --- The class of ordered sets, as described in --- \"Pure Functional Parsing\", section 2.2.1, --- and an example implementation --- derived from appendix A.1 --- --- /OBSOLETE/! this is only used in module "ChartParser" ------------------------------------------------------------------------------ - -module GF.Data.OrdSet (OrdSet(..), Set) where - -import Data.List (intersperse) - - --------------------------------------------------- --- the class of ordered sets - -class OrdSet m where - emptySet :: Ord a => m a - unitSet :: Ord a => a -> m a - isEmpty :: Ord a => m a -> Bool - elemSet :: Ord a => a -> m a -> Bool - (<++>) :: Ord a => m a -> m a -> m a - (<\\>) :: Ord a => m a -> m a -> m a - plusMinus :: Ord a => m a -> m a -> (m a, m a) - union :: Ord a => [m a] -> m a - makeSet :: Ord a => [a] -> m a - elems :: Ord a => m a -> [a] - ordSet :: Ord a => [a] -> m a - limit :: Ord a => (a -> m a) -> m a -> m a - - xs <++> ys = fst (plusMinus xs ys) - xs <\\> ys = snd (plusMinus xs ys) - plusMinus xs ys = (xs <++> ys, xs <\\> ys) - - union [] = emptySet - union [xs] = xs - union xyss = union xss <++> union yss - where (xss, yss) = split xyss - split (x:y:xyss) = let (xs, ys) = split xyss in (x:xs, y:ys) - split xs = (xs, []) - - makeSet xs = union (map unitSet xs) - - limit more start = limit' (start, start) - where limit' (old, new) - | isEmpty new' = old - | otherwise = limit' (plusMinus new' old) - where new' = union (map more (elems new)) - - --------------------------------------------------- --- sets as ordered lists, --- paired with a binary tree - -data Set a = Set [a] (TreeSet a) - -instance Eq a => Eq (Set a) where - Set xs _ == Set ys _ = xs == ys - -instance Ord a => Ord (Set a) where - compare (Set xs _) (Set ys _) = compare xs ys - -instance Show a => Show (Set a) where - show (Set xs _) = "{" ++ concat (intersperse "," (map show xs)) ++ "}" - -instance OrdSet Set where - emptySet = Set [] (makeTree []) - unitSet a = Set [a] (makeTree [a]) - - isEmpty (Set xs _) = null xs - elemSet a (Set _ xt) = elemTree a xt - - plusMinus (Set xs _) (Set ys _) = (Set ps (makeTree ps), Set ms (makeTree ms)) - where (ps, ms) = plm xs ys - plm [] ys = (ys, []) - plm xs [] = (xs, xs) - plm xs@(x:xs') ys@(y:ys') = case compare x y of - LT -> let (ps, ms) = plm xs' ys in (x:ps, x:ms) - GT -> let (ps, ms) = plm xs ys' in (y:ps, ms) - EQ -> let (ps, ms) = plm xs' ys' in (x:ps, ms) - - elems (Set xs _) = xs - ordSet xs = Set xs (makeTree xs) - - --------------------------------------------------- --- binary search trees --- for logarithmic lookup time - -data TreeSet a = Nil | Node (TreeSet a) a (TreeSet a) - -makeTree xs = tree - where (tree,[]) = sl2bst (length xs) xs - sl2bst 0 xs = (Nil, xs) - sl2bst 1 (a:xs) = (Node Nil a Nil, xs) - sl2bst n xs = (Node ltree a rtree, zs) - where llen = (n-1) `div` 2 - rlen = n - 1 - llen - (ltree, a:ys) = sl2bst llen xs - (rtree, zs) = sl2bst rlen ys - -elemTree a Nil = False -elemTree a (Node ltree x rtree) - = case compare a x of - LT -> elemTree a ltree - GT -> elemTree a rtree - EQ -> True - - |
