All pastes #66774 Raw Edit

Kasperle

public text v1 · immutable
#66774 ·published 2006-06-18 10:04 UTC
rendered paste body
data Eq a => Set a = EmptySet | Insert a (Set a)

instance (Eq a, Show a) => Show(Set a) where
     show someset = "{ " ++ (show' (uniqueSet someset)) ++ "}" where
          show' EmptySet = ""
          show' (Insert element EmptySet) = show element
          show' (Insert element (Insert y someset)) = show element ++ ", " ++ show' (Insert y someset)

uniqueSet :: Eq a => Set a -> Set a
uniqueSet EmptySet = EmptySet
uniqueSet (Insert element someset) = Insert element (deleteSet element someset)
          

deleteSet :: Eq a => a -> Set a -> Set a
deleteSet element EmptySet = EmptySet
deleteSet element1 (Insert element2 someset) | element1==element2 = deleteSet element1 someset
                                             | otherwise          = Insert element2 (deleteSet element1 someset)



memberSet :: Eq a => a -> Set a -> Bool
memberSet element EmptySet = False
memberSet element (Insert element2 someset) | element == element2 = True
                                            | otherwise = memberSet element someset

subSet :: Eq a => Set a -> Set a -> Bool
subSet EmptySet someset = True
subSet (Insert element someset) EmptySet = False
subSet (Insert element1 someset1) someset2 | memberSet element1 someset2 = subSet someset1 someset2
                                           | otherwise                   = False
instance Eq a => Eq (Set a) where
     (==) someset1 someset2 = (subSet someset1 someset2) && (subSet someset2 someset1)


hasPath :: Eq a => a -> a -> Set(a,a) -> Bool
hasPath fromnode tonode EmptySet = fromnode == tonode 
hasPath fromnode tonode (Insert (somenode1,somenode2)  somegraph) = ((hasPath fromnode somenode1 somegraph) && (hasPath somenode2 tonode somegraph)) || (hasPath fromnod
e tonode somegraph)