【发布时间】:2012-04-04 05:27:55
【问题描述】:
我正在为我的 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
【问题讨论】:
-
我认为
result应该是[6,7,8]而不是[6,7,7]。