import Data.List (sort) -------------------- -- Exercise 1 -------------------- flatSort :: [[Integer]] -> [Integer] flatSort x = concat (map (\y -> sort y) x) -- >>> flatSort [[1,2,3], [1,3,2]] -- [1,2,3,1,2,3] -- >>> flatSort [[1], [2]] -- [1,2] -- >>> flatSort [[1], [1,2], [1,2,3]] -- [1,1,2,1,2,3] -------------------- -- Exercise 2 -------------------- xs :: [[Integer]] xs = [[1], [2, 1]] -- >>> (concat xs) /= (flatSort xs) -- True -------------------- -- Exercise 3 -------------------- flatSort' xs = case xs of [] -> [] x:xs -> sort x ++ flatSort' xs -------------------- -- Exercise 4 -------------------- initial :: String -> String -> Bool initial xs ys = case xs of [] -> True x:xs -> ( case ys of [] -> False y:ys -> if x == y then initial xs ys else False) -- >>> initial "abc" "abcd" -- True -- >>> initial "abc" "xabcd" -- False -------------------- -- Exercise 5 -------------------- substring :: String -> String -> Bool substring xs ys = case ys of [] -> False _ -> initial xs ys || substring xs (tail ys) -- >>> substring "abc" "xadbcd" -- False -- >>> substring "abc" "xadbabccd" -- True -- >>> substring "abc" "ab" -- False