Hi,

I've written this function here:

   scramble [] = []
   scramble [x] = [[z] | z <- scramble x]
   scramble (x:xs) =
      [(y:z)|y <- scramble x, z <- scramble xs]

and (I think) it roughly does what I want it to:

   *Main> scramble ([]::[Int])
   []
   *Main> scramble ([1]::[Int])
   [[1],[2]]
   *Main> scramble ([1,2]::[Int])
   [[1,1],[1,2],[2,1],[2,2]]
   *Main> scramble ([1,2,3]::[Int])
   [[1,1,1],[1,1,2],[1,2,1],[1,2,2],[2,1,1],[2,1,2],[2,2,1],[2,2,2]]

Three questions:

1. What should I call this function?
2. Is there already one in the standard library that does the same thing?
3. Is it possible to rewrite it with only "scramble []" and "scramble
(x:xs)" and not the "scramble[x]"?

Thanks

-John
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to