[Haskell-cafe] What is this function?

John Ky newhoggy at gmail.com
Thu Oct 16 05:00:55 EDT 2008


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20081016/8621f1a6/attachment.htm


More information about the Haskell-Cafe mailing list