我正在Haskell中处理一个函数,它接收一个Ints列表和一个Int。
sublistSum :: [Ints] -> Int -> [[Ints]]
它返回的是一个子列表,其中包含原始列表中与Int。
相加的数字列表例如:
sublistSums [1, 5, -2, 4, 3, 2] 2
[[1,-2,3],[-2,4],[2]]
我的工作:
sublistSums [] num = []
sublistSums (x:xs) num
| findSum x xs num == num = findSum x xs num 0 : sublistSums (x:xs) num
| otherwise = sublistSums xs num
findSum x [] num count = []
findSum x (y:ys) num count
| ...
所以findSum
是我做的辅助函数,应该返回这样的数字列表(加起来就是这个数字)。
到目前为止,我有点困惑。我如何标记它以便findSum
不会反复给我一遍又一遍的数字列表?
答案 0 :(得分:6)
您可以先使用subsequences
中的Data.List
函数生成所有可能的子列表的列表。然后,只需按其总和过滤列表即可。
import Data.List
sublistSum :: [Int] -> Int -> [[Int]]
sublistSum list target =
filter (\x -> sum x == target) $ subsequences list