<div dir="ltr">Hi,<br><br>I&#39;ve written this function here:<br><br>&nbsp;&nbsp; scramble [] = []<br>&nbsp;&nbsp; scramble [x] = [[z] | z &lt;- scramble x]<br>&nbsp;&nbsp; scramble (x:xs) =<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [(y:z)|y &lt;- scramble x, z &lt;- scramble xs]<br>
<br>and (I think) it roughly does what I want it to:<br><br>&nbsp;&nbsp; *Main&gt; scramble ([]::[Int])<br>&nbsp;&nbsp; []<br>&nbsp;&nbsp; *Main&gt; scramble ([1]::[Int])<br>&nbsp;&nbsp; [[1],[2]]<br>&nbsp;&nbsp; *Main&gt; scramble ([1,2]::[Int])<br>&nbsp;&nbsp; [[1,1],[1,2],[2,1],[2,2]]<br>
&nbsp;&nbsp; *Main&gt; scramble ([1,2,3]::[Int])<br>&nbsp;&nbsp; [[1,1,1],[1,1,2],[1,2,1],[1,2,2],[2,1,1],[2,1,2],[2,2,1],[2,2,2]]<br><br>Three questions:<br><br>1. What should I call this function?<br>2. Is there already one in the standard library that does the same thing?<br>
3. Is it possible to rewrite it with only &quot;scramble []&quot; and &quot;scramble (x:xs)&quot; and not the &quot;scramble[x]&quot;?<br><br>Thanks<br><br>-John<br><br></div>