Hi,

I want to implement linear list shuffle in Haskell (http://c2.com/cgi/wiki?LinearShuffle) and I invented code:

shuffle :: [a] -> IO [a]
shuffle [] = return []
shuffle x = do
    r <- randomRIO (0::Int,length x - 1)
    s <- shuffle (take r x ++ drop (r+1) x)
    return ((x!!r) : s)

This algorithm seems not effective, length, take, drop and (!!) are costly. Is there any better way to implement shuffle?

--
Gracjan
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to