Am Montag 15 März 2010 08:37:20 schrieb Magicloud Magiclouds: > Sorry, I did not make it clear, since I did not know how to say this > in technical terms. > With comprehension, I could get all the possibilities that "draw one > elem from each list and put them together". But consider this: for > example, there are two types of pet, dog and cat. And there are two > persons, him and her. So "how many kinds of matches are there > (orderless)?" The answer is two: "him with dog and her with cat, him > with cat and her with dog". So > f [a, b, c] [d, e, f] [g, h, i] = > [ [ (a, d, g), (b, e, h), (c, f, i) ] > , [ (a, d, g), (b, e, i), (c, f, h) ] > , [ (a, d, h), (b, e, i), (c, f, g) ] > , [ (a, d, h), (b, e, g), (c, f, i) ] > , [ (a, d, i), (b, e, g), (c, f, h) ] > , [ (a, d, i), (b, e, h), (c, f, g) ] > ... ] >
In both, your verbal example and the pseudo-code example, all the groups have the same number of members (equal to the number of groups, which may or may not be coincidental). Is that a precondition, that all groups have the same number of members? If so, would the desired result for three groups of two members each be f3 [a,b] [c,d] [e,f] = [ [ (a,c,e), (b,d,f) ] , [ (a,c,f), (b,d,e) ] , [ (a,d,e), (b,c,f) ] , [ (a,d,f), (b,c,e) ] ] and for two groups of three members each f2 [a,b,c] [d,e,f] = [ [ (a,d), (b,e), (c,f) ] , [ (a,d), (b,f), (c,e) ] , [ (a,e), (b,d), (c,f) ] , [ (a,e), (b,f) , (c,d) ] , [ (a,f), (b,d), (c,e) ] , [ (a,f), (b,e), (c,d) ] ] ? In that case, look at Data.List.permutations and the zipN functions. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe