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