Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

📚 The CoCalc Library - books, templates and other resources

132944 views
License: OTHER
1
splitWhen :: (a -> Bool) -> [a] -> ([a], [a])
2
splitWhen _ [] = ([], [])
3
splitWhen p (x:xs)
4
| p x = ([], x:xs)
5
| otherwise = let (ys, zs) = splitWhen p xs
6
in (x:ys, zs)
7
-- >>> splitWhen even [1,2,3]
8
-- ([1],[2,3])
9
10
group :: Eq a => [a] -> [[a]]
11
group [] = []
12
group (x:xs) = let (group1, rest) = splitWhen (/=x) xs
13
in (x:group1) : group rest
14
15
encode :: Eq a => [a] -> [(a, Int)]
16
encode xs = map (\x -> (head x, length x)) (group xs)
17
18
decode [] = []
19
decode ((x,n):xs) = replicate n x ++ decode xs
20
-- alternativ
21
decode = concat . (map (\(x,n)->replicate n x))
22
23