ich ein Haskell Programm schreiben wollen, das die Elemente in einer Liste „ramdomize“:Randomize eine Haskell Liste
import System.Random (getStdGen, randomRIO)
import Data.List (permutations)
rndElem :: [a] -> IO a
rndElem xs = do
index <- randomRIO (0, length xs - 2)
return $ xs !! index
rndPermutation :: [a] -> IO [a]
rndPermutation xs = rndElem . permutations $ xs
jedoch läuft dies scheint nicht vollständig um die Liste randomisieren. Es wird nur zufällig jedes andere Element aus irgendeinem Grund, z. [1,2,3,4,5,6]
->[5,2,1,4,3,6]
. Jeder Durchlauf dieses Algorithmus hält die ungeraden Indexelemente (2, 4, 6) an der gleichen Stelle. Gibt es irgendwelche logischen Fehler bei der Indexierung des obigen Algorithmus?
Ich lief das und bekam '[4,2,1,5,6,3]'. –
Warum die '2' in 'randomRIO (0, Länge xs - 2)'? –
@ ScottNewson ist das nicht der beste Weg, um sicherzustellen, dass wir die Liste randomisieren? – ABlueCrayon