2.2. Lists
Reversing a List
myreverse :: [a] -> [a] myreverse mylist = helper mylist [] where helper :: [a] -> [a] -> [a] -- A stopping condition helper [] as = as -- Recurse helper (b:bs) as = helper bs (b:as) |
Run-Length Encoding
rle :: Eq a => [a] -> [(a,Integer)] rle [] = [] rle (a:[]) = [(a,1)] rle (x:xs) = (if (x == a) then (a,count+1):as else (x,1):(a,count):as ) where ((a,count):as) = (rle xs) |
Quick-Sort
qsort [] = [] -- ++ is list concatenation qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x where -- Choose the elements out of xs that are lesser than x elts_lt_x = [y | y <- xs, y < x] elts_greq_x = [y | y <- xs, y >= x] |