查找具有指定总和

时间:2017-02-13 14:41:27

标签: list haskell

我正在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不会反复给我一遍又一遍的数字列表?

1 个答案:

答案 0 :(得分:6)

您可以先使用subsequences中的Data.List函数生成所有可能的子列表的列表。然后,只需按其总和过滤列表即可。

import Data.List

sublistSum :: [Int] -> Int -> [[Int]]
sublistSum list target =
    filter (\x -> sum x == target) $ subsequences list