【发布时间】:2016-07-17 08:54:58
【问题描述】:
我想在 haskell 中编写一个函数,该函数将整数列表和整数值作为输入,并输出所有列表的列表,其中包含的元素组合加起来为输入整数。
例如:
myFunc [3,7,5,9,13,17] 30 = [[13,17],[3,5,9,13]]
尝试:
myFunc :: [Integer] -> Integer -> [[Integer]]
myFunc list sm = case list of
[] -> []
[x]
| x == sm -> [x]
| otherwise -> []
(x : xs)
| x + myFunc xs == sm -> [x] ++ myFunc[xs]
| otherwise -> myFunc xs
我的代码只产生一个组合,并且该组合必须是连续的,这不是我想要实现的目标
【问题讨论】:
-
您说允许重复,但您没有将
[3,3,3,7,7,7]作为示例中加起来为 30 的列表之一。如果这不是您所说的重复,那是什么意思? -
我的意思是一个数字可以以两种组合出现,例如 13 在 [[13,17],[3,5,9,13]] 中出现两次。我想我不应该这么说,因为很明显我们可以在两种组合中使用一个数字,所以我会删除它。