szukam rozwiązania dla mojej klasy Haskell.Połączyć listę i zsumować z podlistą?
Mam listę numerów i muszę zwrócić SUM dla każdej części listy. Części są podzielone przez 0. Potrzebuję użyć funkcji FOLDL.
przykład:
początkową listy: [1,2,3,0,3,4,0,5,2,1]
podlistę [[1,2,3], [3,4], [5,2,1]]
wynik [6,7,7]
mam funkcji znajdowania 0 w początkowej listy:
findPos list = [index+1 | (index, e) <- zip [0..] list, e == 0]
([4,6] powraca do początkowej listy z przykładu)
oraz funkcja do tworzenia SUMA z FOLDLEM:
sumList list = foldl (+) 0 list
Ale zupełnie nie udało się umieścić go razem:/
---- Moje rozwiązanie
W końcu znalazłem coś zupełnie innego, że chłopaki sugerowane.
Zajęło mi cały dzień, aby go:/
groups :: [Int] -> [Int]
groups list = [sum x | x <- makelist list]
makelist :: [Int] -> [[Int]]
makelist xs = reverse (foldl (\acc x -> zero x acc) [[]] xs)
zero :: Int -> [[Int]] -> [[Int]]
zero x acc | x == 0 = addnewtolist acc
| otherwise = addtolist x acc
addtolist :: Int -> [[Int]] -> [[Int]]
addtolist i listlist = (i : (head listlist)) : (drop 1 listlist)
addnewtolist :: [[Int]] -> [[Int]]
addnewtolist listlist = [] : listlist
myślę 'result' powinno być' [6,7,8] 'zamiast' [6,7,7] '. – Landei