2017-02-13 14 views
1

私はHaskellの関数で、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が繰り返し同じリストを何度も何度も私に与えないようにするにはどうすればいいですか?

+2

引数の順序を逆にしたほうがいいかもしれません。なぜなら、 'sublistSum n'は' sortのような一連の操作で使用できるからです。サブリスト2。 $ {1..10] ' –

+0

興味深い...心に留めておきます。 –

答えて

6

最初に、subsequencesからData.Listの機能を使用して、すべての可能なサブリストのリストを作成できます。それでは、リストをその合計でフィルタリングするだけです。

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

私はそれを考え出しましたでる!ありがとう、私のupvoteを持ってください。 –

関連する問題