
What about something like:
combinations n = filter (\s -> length s == n) . subsequences
hth,
L.
On Sun, Nov 13, 2011 at 10:42 PM, Peter Hall
Hi all, This function took me a long time to write, getting my head around the double recursion. It returns a list of all possible sub-sets of a given length from a list.
I have a couple of questions.
1. Can it be improved for efficiency or style? 2. Is there a library that already has this and other related functions? I assumed there would be but I couldn't find it on hoogle.
combinations :: Int -> [a] -> [[a]] combinations _ [] = [] combinations 0 _ = [] combinations 1 x = map (:[]) x combinations n (x:xs) = (map (x:) $ combinations (n-1) xs) ++ combinations n xs
e.g.
combinations 3 [1..5]
[[1,2,3],[1,2,4],[1,2,5],[1,3,4],[1,3,5],[1,4,5],[2,3,4],[2,3,5],[2,4,5],[3,4,5]]
Thanks, Peter
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners