-- | Subsets. module Math.Combinat.Sets ( kSublists , sublists , countKSublists , countSublists ) where import Math.Combinat.Helper ------------------------------------------------------- -- | Sublists of a list having given number of elements. kSublists :: Int -> [a] -> [[a]] kSublists 0 _ = [[]] kSublists k [] = [] kSublists k (x:xs) = map (x:) (kSublists (k-1) xs) ++ kSublists k xs -- | @# = \binom { n } { k }@. countKSublists :: Int -> Int -> Integer countKSublists k n = binomial (fromIntegral n) (fromIntegral k) -- | All sublists of a list. sublists :: [a] -> [[a]] sublists [] = [[]] sublists (x:xs) = map (x:) (sublists xs) ++ sublists xs -- | @# = 2^n@. countSublists :: Int -> Integer countSublists n = 2 ^ n -------------------------------------------------------