Haskell,返回一个元组

时间:2013-05-01 22:59:45

标签: haskell

我有这个代码,它是不重复的组合公式:

combinaciones   ::  Int ->[Int]->[[Int]]
combinaciones   0   _   =   [[]]
combinaciones   _   []  =   []
combinaciones   k   (x:xs)  =   [x:ys | ys <- combinaciones (k - 1) xs] ++ combinaciones k xs

combinationsN   ::  Int ->Int->[[Int]]
combinationsN   n   k   =   combinaciones   k   [1..n]

我的问题是我希望返回一个列表列表,列表中包含列表数量,一对:([[Int]],Int)。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

这是一个简单的版本 - 可能通过计算可以更有效地完成它,但这是我在凌晨1点可以提出的。

combinationsWithCount :: Int -> [Int] -> ([[Int]], Int)
combinationsWithCount n xs = let cs = combinaciones n xs
                             in (cs, length cs)

编辑:好的,让我尝试编写智能版本。

combinaciones   ::  Int -> [Int] -> ([[Int]], Int)
combinaciones   0   _   =   ([[]], 1)
combinaciones   _   []  =   ([], 0)
combinaciones   k   (x:xs)  =
    let (first, firstN) = combinaciones (k - 1) xs
        (second, secondN) = combinaciones k xs
    in ([x:ys | ys <- first] ++ second, firstN + secondN)

绝对不能保证这是正确的,我睡着了。 ; - )