[Haskell-cafe] Combination-lock problem

Graham Klyne GK at ninebynine.org
Tue Aug 10 07:00:53 EDT 2004

At 06:01 10/08/04 +0200, Florian Boehl wrote:
>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]

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


Graham Klyne
For email:

More information about the Haskell-Cafe mailing list