-------------------------------------------------------------------------------- -- Ex. 1 insertall :: a -> [a] -> [[a]] insertall a bs = insertnext a [] bs insertnext :: a -> [a] -> [a] -> [[a]] insertnext a pre [] = [(pre ++ [a])] insertnext a pre (p:post) = (pre ++ [a] ++ (p:post)): (insertnext a (pre ++ [p]) post) -------------------------------------------------------------------------------- -- Ex. 2 transpose :: [[a]] -> [[a]] transpose ([]:_) = [] transpose as = (map head as):(transpose (map tail as)) mult :: (Num a) => [[a]] -> [[a]] -> [[a]] mult as bs = let ts = transpose bs in map (inject ts) as inject :: (Num a) => [[a]] -> [a] -> [a] inject bs a = [sum (vectorprod a b) | b <- bs ] vectorprod :: (Num a) => [a] -> [a] -> [a] vectorprod [] [] = [] vectorprod (a:as) (b:bs) = (a*b):(vectorprod as bs) -------------------------------------------------------------------------------- -- Ex. 3 riffle :: [Int] -> [Int] riffle as = myzip evens odds where evens = filter even as odds = filter odd as myzip :: [a] -> [a] -> [a] myzip as [] = [] myzip [] bs = [] myzip (a:as) (b:bs) = a:b:(myzip as bs) -------------------------------------------------------------------------------- -- Ex. 4 sortit :: [Int] -> [Int] sortit [] = [] sortit as = [a | a <- as, a == m] ++ sortit [a | a <- as, a /= m] where m = minimum as --------------------------------------------------------------------------------