At 06:01 10/08/04 +0200, Florian Boehl wrote:
Hi,

I'ld like to generate a list (of lists) that contains all combinations
of natural numbers stored in another list. It should work like a
combination-lock. E.g.:

[2,2] -> [[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[2,0],[2,1],[2,2]]

If I know the length 'l' of the 'locklist', I can solve the
problem via generators. E.g.:

l = 2: [[a,b] | a <- [0..locklist!!0], b <- [0..locklist!!1]]

But if the length is unknown (because it's dynamic) this solutions (of
course) fails. Is it possible to solve this problem in haskell in an
elegant way?

I can think of one using 'sequence', 'map' and a lambda abstraction.

[[
Main> combo [2,3,4]
[[1,1,1],[1,1,2],[1,1,3],[1,1,4],[1,2,1],[1,2,2],[1,2,3],[1,2,4],[1,3,1],[1,3,2]
,[1,3,3],[1,3,4],[2,1,1],[2,1,2],[2,1,3],[2,1,4],[2,2,1],[2,2,2],[2,2,3],[2,2,4]
,[2,3,1],[2,3,2],[2,3,3],[2,3,4]]
]]

(It's a trivial to tweak the range to start from 0.)

#g


------------ Graham Klyne For email: http://www.ninebynine.org/#Contact

_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to