12345678910111213141516171819202122 |
- splitWhen :: (a -> Bool) -> [a] -> ([a], [a])
- splitWhen _ [] = ([], [])
- splitWhen p (x:xs)
- | p x = ([], x:xs)
- | otherwise = let (ys, zs) = splitWhen p xs
- in (x:ys, zs)
- -- >>> splitWhen even [1,2,3]
- -- ([1],[2,3])
- group :: Eq a => [a] -> [[a]]
- group [] = []
- group (x:xs) = let (group1, rest) = splitWhen (/=x) xs
- in (x:group1) : group rest
- encode :: Eq a => [a] -> [(a, Int)]
- encode xs = map (\x -> (head x, length x)) (group xs)
- decode [] = []
- decode ((x,n):xs) = replicate n x ++ decode xs
- -- alternativ
- decode = concat . (map (\(x,n)->replicate n x))
|