Estoy buscando una solución para mi clase Haskell.¿Dividir lista y hacer suma de sublista?
Tengo una lista de números y debo devolver SUM para cada parte de la lista. Las partes están divididas por 0. Necesito usar la función FOLDL.
Ejemplo:
lista inicial: [1,2,3,0,3,4,0,5,2,1]
sublista [[1,2,3], [3,4], [5,2,1]]
resultado [6,7,7]
tengo una función de búsqueda en la lista inicial 0:
findPos list = [index+1 | (index, e) <- zip [0..] list, e == 0]
(retornos [4,6] para la lista inicial del ejemplo)
y función para hacer SUM con FOLDL:
sumList list = foldl (+) 0 list
Pero fracasado por completo a poner juntos:/
---- Mi solución
Al final he encontrado algo completamente diferente que ustedes sugeridas.
Me llevó todo el día para que sea:/
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
Creo que 'result' debe ser' [6,7,8] 'en lugar de' [6,7,7] '. – Landei