====== Aplicatii (higher-order functions) ====== Separarea unui sir dupa un caracter, folosind ''foldr'': spaceSep :: String -> [String] spaceSep = foldr op [] where op :: Char -> [String] -> [String] op ' ' acc = []:acc op x [] = [[x]] -- atentie! op x (y:ys) = (x:y):ys charSep :: Char -> String -> [String] charSep c = foldr op [] where op x [] | x == c = [] | otherwise = [[x]] op x (y:ys) | x == c = []:y:ys | otherwise = (x:y):ys spaceSep1 = charSep ' ' Parsarea unei matrici folosind compunere si functii de ordin superior: parseMat :: String -> [[Integer]] parseMat = (map (map read)) . (map (charSep ' ')) . (charSep '\n') Inmultirea unei matrici: transpose ([]:_) = [] -- ([]:_) -> o lista NEVIDA care contine ca prim element, [] transpose m = (map head m):(transpose (map tail m)) multiply m1 m2 = map (\lx -> map (\cy -> foldr (+) 0 (zipWith (*) lx cy)) (transpose m2)) m1