
18 Dec
2007
18 Dec
'07
2:18 p.m.
Support, though I'd tweak the code in your patch a little: subsequences :: [a] -> [[a]] subsequences [] = [[]] subsequences (x:xs) = let s = subsequences xs in s ++ map (x:) s permutations :: [a] -> [[a]] permutations [] = [[]] permutations (x:xs) = concatMap interleave $ permutations xs where interleave [] = [[x]] interleave (y:ys) = (x:y:ys) : map (y:) (interleave ys) In subsequences, make sure we don't calculate "subsequences xs" twice. In permutations, use : instead of ++ in one place, use concatMap instead of list comprehension, and take out unnecessary parameter to interleave.