Haskell:
Generera slumptal
Hur man gör:
För att generera slumpmässiga tal i Haskell använder man vanligtvis random
-paketet, som är en del av Haskell-plattformen. Här är en steg-för-steg-guide:
Först, se till att du har random
-paketet installerat. Om inte, kan du få det via Cabal eller Stack.
Generera ett slumpmässigt tal
För att generera ett enkelt slumpmässigt tal kan du använda funktionen randomRIO
, som producerar ett slumpmässigt värde inom ett angivet intervall.
import System.Random (randomRIO)
main :: IO ()
main = do
randomNumber <- randomRIO (1, 10) :: IO Int
putStrLn $ "Slumpmässigt tal: " ++ show randomNumber
Generera en lista av slumpmässiga tal
Att generera en lista av slumpmässiga tal är något mer involverat men fortfarande rakt på sak:
import System.Random (randomRIO)
randomList :: Int -> IO [Int]
randomList 0 = return []
randomList n = do
r <- randomRIO (1, 100)
rs <- randomList (n-1)
return (r:rs)
main :: IO ()
main = do
numbers <- randomList 5
print numbers
Den här kodsnutten skapar en funktion randomList
som genererar en lista av slumpmässiga heltal. Ersätt (1, 100)
med ditt önskade intervall.
Fördjupning
Haskell random
-paketet tillhandahåller en pseudoslumpmässig nummergenerator (PRNG), vilket betyder att de genererade talen inte är verkligt slumpmässiga men kan framstå som slumpmässiga för många applikationer. Kärnan i Haskells förmåga att generera slumpmässiga tal ligger i typklassen RandomGen
, som abstraherar olika metoder för att generera slumpmässiga tal, och typklassen Random
, som innefattar typer som kan genereras slumpmässigt.
Historiskt sett har Haskells tillvägagångssätt för generering av slumpmässiga tal betonat renhet och reproducerbarhet. Det är därför operationer som involverar slumpmässighet explicit hanteras i IO
-monaden eller kräver manuell passage och uppdatering av generatorns tillstånd - för att bibehålla referenstransparens.
I vissa applikationer, som kryptografi, kanske de pseudoslumpmässiga tal som genereras av standard-PRNG inte är tillräckligt säkra. För dessa användningsfall vänder sig Haskell-programmerare ofta till mer specialiserade bibliotek som crypto-random
, som är utformade för att uppfylla de strikta kraven från kryptografiska applikationer.
Dessutom erbjuder alternativa bibliotek som mwc-random
bättre prestanda och kvalitet på slumpmässiga tal för simuleringar och andra applikationer, genom att implementera moderna algoritmer såsom Mersenne Twister.
När man väljer en metod för generering av slumpmässiga tal i Haskell, är det väsentligt att överväga applikationens behov med avseende på kvaliteten på slumpmässigheten, prestanda och säkerhet för att välja det mest lämpliga verktyget eller biblioteket.