我試圖找出解決方案的Problem 27的99個Haskell問題。
以下是我希望它是:總是從後衛返回true
group :: (Eq a) => [Int] -> [[a]] -> [[[[a]]]]
group [] _ = []
group (i:is) xs
| sum (i:is) /= length xs = error "invalid arguments"
| otherwise = ...
從鏈接的示例:
組[2,2,5] [ 「醛」, 「拍」, 「卡拉」, 「david」,「evi」,「flip」,「gary」,「hugo」,「ida」]
[[[aldo「,」beat「],[」carla「,」david「],[」 EVI」, 「炫」, 「蓋瑞」, 「雨果」, 「伊達」]] ...] (共756解決方案)
因此,我想首先檢查磨片那麼Int列表的總和等於上面的長度String列表。我碰到的是,無論這兩個值是否相等,它都會打印出「無效參數」。我也試過這樣:
group (i:is) xs
| (sum (i:is) == length xs) = ...
| otherwise = error "invalid arguments"
仍然無法正常工作
任何想法?
更新:謝謝你們,我的粗心大意。下面是函數的遞歸部分:
group (i:is) xs
| (sum (i:is) == length xs) = filter (/= []) $ concatGroups (combinations i xs) (group is xs)
| otherwise = error ("invalid arguments: " ++ show (sum(i:is)) ++ "/=" ++ show(length xs))
正如你所知道的,group is xs
減少的總和,但不長所以它會總是會遞歸時抱怨。我想我會移除那個警衛,並希望用戶永遠不會犯錯。
您的「組」函數是否遞歸?實際上,這是一個糟糕的名字:Data.List中存在另一個'group'函數。 – 2012-01-12 15:21:12
你能否包含其餘的功能?您可能會在'...'部分的某處遞歸調用中打破不變。 – hammar 2012-01-12 15:28:38
你大概要求至少有一個元素,即組[1] []。但是第二個列表的長度是多少?第一個的總和是多少? – Sarah 2012-01-12 15:56:48