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