я ищу решение для моего класса Haskell.
У меня есть список чисел, и мне нужно вернуть SUM для каждой части списка. Части делятся на 0. Мне нужно использовать функцию FOLDL.
Пример:
начальный список: [1,2,3,0,3,4,0,5,2,1]
подсписок [[1,2,3],[3,4],[5,2,1]]
результат [6,7,7]
У меня есть функция для нахождения 0 в исходном списке:
findPos list = [index+1 | (index, e) <- zip [0..] list, e == 0]
(возвращает [4,6] для исходного списка из примера)
и функция для создания СУММ с FOLDL:
sumList list = foldl (+) 0 list
Но мне совершенно не удалось это собрать :/
---- МОЕ РЕШЕНИЕ
В конце концов я нашел что-то совершенно другое, что вы, ребята, предложили.
На это ушел целый день :/
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