On 30 Jan 2010, at 20:59, michael rice wrote:
I'm not sure where I got this PICK function from, and don't
understand why it's written as it is, so I wanted to test it for
randomness. It seems random enough. But if I understand the
algorithm correctly, instead of selecting one of the elements from
the list, it eliminates all the elements but one and that's the
value it returns. Seems like a roundabout way of doing it. Comments?
Below is a function draw() that shuffles an interval, and prints it out.
Hans
----
import Random
getRandomIndex :: [a] -> IO(Int)
getRandomIndex ls = getStdRandom(randomR(0, (length ls) - 1))
remove :: Int -> [a] -> [a]
remove 0 (x:xs) = xs
remove n (x:xs) | n>0 = x: remove (n-1) xs
remove _ (_:_) = error "remove: negative argument"
remove _ [] = error "remove: too large argument"
shuffle :: [a] -> IO [a]
shuffle [] = return []
shuffle ls = do i <- getRandomIndex ls
do l <- shuffle (remove i ls)
return ((ls !! i) : l)
draw ls = do k <- shuffle ls
putStr (show k)
----
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe