2017-02-13 38 views
1

我正在研究Haskell中的函數,它接收Ints和Int列表。查找具有指定總和的子列表

它返回的是一個子列表,其中包含原始列表中包含的數字列表,該列表將添加到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不會重複給我一遍又一遍的同一個數字列表?

+2

顛倒參數的順序可能會更好,因爲'sublistSum n'可以用在像sort這樣的一系列操作中。 sublistSum 2。過濾器(不,甚至)$ [1..10]' –

+0

有趣...我會記住,謝謝 –

回答

6

您可以首先使用Data.List的功能subsequences生成所有可能的子列表的列表。然後,這只是按照他們的總和過濾清單的問題。

import Data.List 

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

非常感謝你的答案。我會看到我可以用這個工作。 –

+0

看看['subsequences'](http://hackage.haskell.org/package/base-4.9.1.0/docs/src/Data.OldList.html#subsequences)的實現靈感 –

+0

我想到了它出來了!謝謝你,請讓我高興。 –

相關問題