我正在Haskell中处理一个函数,它接收Ints和Int的列表.
sublistSum :: [Ints] -> Int -> [[Ints]]
Run Code Online (Sandbox Code Playgroud)
它返回的是一个子列表,其中包含原始列表中与Int相加的数字列表.
例如:
sublistSums [1, 5, -2, 4, 3, 2] 2
[[1,-2,3],[-2,4],[2]]
Run Code Online (Sandbox Code Playgroud)
我的工作:
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
| ...
Run Code Online (Sandbox Code Playgroud)
所以findSum我做的辅助函数应该返回这样的数字列表(加起来这个数字).
到目前为止我有点困惑.我如何标记它以便findSum不会反复给我相同的数字列表?
你可以先用生产函数的所有可能的子列表列表subsequences的Data.List.然后,只需按其总和过滤列表即可.
import Data.List
sublistSum :: [Int] -> Int -> [[Int]]
sublistSum list target =
filter (\x -> sum x == target) $ subsequences list
Run Code Online (Sandbox Code Playgroud)