[Haskell-cafe] System.Random.Shuffle fix

Manlio Perillo manlio_perillo at libero.it
Mon Mar 23 13:36:18 EDT 2009


friggin friggin ha scritto:
> I was looking for a shuffling algorithm to shuffle mp3-playlists so was 
> very happy to see System.Random.Shuffle:
> http://hackage.haskell.org/cgi-bin/hackage-scripts/package/random-shuffle-0.0.2
> 
> However I get  errors,non-exhaustive patterns in function shufleTree or 
> extractTree depending how I call it. Errors are at the bottom.
> 

During building you should only get warnings.
Non exhaustive patterns are ok, you hit them only if the input data is 
incorret.

Probably in these cases, error should be used.

> I fixed it but I don't have the math skills to see if I perhaps broke it 
> statistically ...
> 
> Here is my fix, someone (don't remember who, helped me a little):
> http://hpaste.org/fastcgi/hpaste.fcgi/view?id=2789#a2789
> the shuffle at the end is with the fix.
> 
> 
> *Freet> S.shuffle [1..10] [1..3]

Your input is not correct.
If you read the source code (in a future version I'll add Haddock support):

-- Given a sequence (e1,...en) to shuffle, and a sequence
-- (r1,...r[n-1]) of numbers such that r[i] is an independent sample
-- from a uniform random distribution [0..n-i], compute the
-- corresponding permutation of the input sequence.

I have added a convenience function `shuffle'`, where you just need to 
supply a random number generator.

Note that the shuffle' function contains a "bug";
it should return the new random generator:
     shuffle' :: RandomGen gen => [a] -> Int -> gen -> ([a], gen)

I'm going to fix it in next version.

 > [...]



Regards  Manlio


More information about the Haskell-Cafe mailing list