【发布时间】:2014-06-03 09:11:06
【问题描述】:
我对 Haskell 中的列表有疑问。
有一个由不同值组成的整数列表。 我该如何编写一个函数来计算由 n 元素和 t 总数组成的所有子列表。更清楚,
fList [1..5] 5 12
Output: [[1,1,1,4,5], [1,1,2,3,5], [1,1,2,4,4], ... , [2,2,2,3,3]]
(每个列表由5个元素组成,列表总和为12。)
or
fList [2,3,4,6] 7 22
[[2,2,2,2,2,6,6], [2,2,2,2,4,4,6], ..., [3,3,3,3,3,3,4]]
(每个列表由7个元素组成,列表的总和总是22。)等等...
fList :: [Integer] -> Int -> Integer -> [[Integer]]
(源列表的元素可能在目标列表中重复。)
我不知道该怎么做?有人可以帮忙吗?
【问题讨论】:
-
对于某些
t、n,计算给定大小n-1列表中每个x的问题,并在t-x前面加上x。跨度> -
提示:
sequence $ replicate 5 [1..5] -
分解问题:你想枚举属于集合的
n元素的所有组合,然后过滤总和为t的那些。 -
但这可能不是最有效的方法。如果你的枚举是顺序敏感的,你会得到重复的。
标签: haskell