fork download
  1. foresome :: (Eq a) => [a] -> (a -> Bool) -> Bool
  2. foresome [] p = False
  3. foresome (x:xs) p = if (p x) then True
  4. else foresome xs p
  5.  
  6. remove v = filter (\x -> x /= v)
  7.  
  8. delnode :: (Eq a) => [[a]] -> a -> [[a]]
  9. delnode tree v = if foresome tree (\x -> (head x) == v)
  10. then do
  11. let qq = tail $ head $ filter (\x -> v == head x) tree
  12. let vv = filter (\x -> (head x) /= v) tree
  13. map (\x -> if (elem v x) then ((remove v x) ++ qq) else x) vv
  14. else filter (\y -> (tail y) /= []) (map (\x -> remove v x) tree)
  15.  
  16. tr = [['r', 'a', 'b'], ['a', 'c', 'd', 'e'], ['b', 'k', 'l', 'm'], ['d', 'f', 'g'], ['k', 'n', 'o'], ['l', 'p']]
  17.  
  18. main = do
  19. print $ tr
  20. print $ delnode tr 'd'
  21. print $ delnode tr 'g'
Success #stdin #stdout 0s 4552KB
stdin
Standard input is empty
stdout
["rab","acde","bklm","dfg","kno","lp"]
["rab","acefg","bklm","kno","lp"]
["rab","acde","bklm","df","kno","lp"]