Guest User

knot fail

a guest
Dec 18th, 2023
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.84 KB | None | 0 0
  1. lift :: Eq a => [(a,b)] -> (a -> b)
  2. lift ((k,v):xx) y = if y == k then v else lift xx y
  3.  
  4. lift2:: Eq a => [[a]] -> (a->[a])
  5. lift2 (x:xx) y = if head x == y then tail x else lift2 xx y
  6.  
  7. union z [] [] = []
  8. union z [] yy = union z yy []
  9. union z (x:xx) [] = if z == x then [] else (x:union z xx [])
  10. union z (x:xx) (y:yy) =
  11. if z == x && z == y then []
  12. else if z == x then (y:union z xx yy)
  13. else if z == y then (x:union z xx yy)
  14. else (x:y:union z xx yy)
  15.  
  16. reachable :: Eq a => (a -> [a]) -> [a] -> [[a]]
  17. reachable f xx = knot
  18. where knot = foldr (\x yy -> ((x:(foldr (union x) [] (map (lift2 knot) (f x)))):yy) ) [] xx
  19.  
  20. graph =
  21. [('a',['c','b']),
  22. ('b',['c','d']),
  23. ('c',['b','d']),
  24. ('d',[])]
  25.  
  26. main = do
  27. print graph
  28. print (reachable (lift graph) (map fst graph))
  29.  
Advertisement
Add Comment
Please, Sign In to add comment