Generierung von Zufallszahlen

Haskell:
Generierung von Zufallszahlen

Wie geht das:

Um Zufallszahlen in Haskell zu generieren, verwendet man typischerweise das random Paket, das Teil der Haskell Plattform ist. Hier ist eine Schritt-für-Schritt-Anleitung:

Zunächst stellen Sie sicher, dass Sie das random Paket installiert haben. Wenn nicht, können Sie es über Cabal oder Stack erhalten.

Eine Zufallszahl generieren

Um eine einfache Zufallszahl zu generieren, können Sie die Funktion randomRIO verwenden, die einen zufälligen Wert innerhalb eines spezifizierten Bereichs erzeugt.

import System.Random (randomRIO)

main :: IO ()
main = do
  zufallsZahl <- randomRIO (1, 10) :: IO Int
  putStrLn $ "Zufallszahl: " ++ show zufallsZahl

Eine Liste von Zufallszahlen generieren

Eine Liste von Zufallszahlen zu generieren ist etwas aufwändiger, aber immer noch unkompliziert:

import System.Random (randomRIO)

zufallsListe :: Int -> IO [Int]
zufallsListe 0 = return []
zufallsListe n = do
  r <- randomRIO (1, 100)
  rs <- zufallsListe (n-1)
  return (r:rs)

main :: IO ()
main = do
  zahlen <- zufallsListe 5
  print zahlen

Dieser Code-Schnipsel erstellt eine Funktion zufallsListe, die eine Liste von zufälligen Ganzzahlen generiert. Ersetzen Sie (1, 100) mit Ihrem gewünschten Bereich.

Tiefergehend

Das Haskell random Paket stellt einen Pseudozufallszahlengenerator (PRNG) zur Verfügung, was bedeutet, dass die generierten Zahlen nicht wahrhaft zufällig sind, aber für viele Anwendungen als zufällig erscheinen können. Der Kern von Haskells Fähigkeit zur Zufallszahlengenerierung liegt in der RandomGen Typklasse, die verschiedene Methoden zur Generierung von Zufallszahlen abstrahiert, und der Random Typklasse, die Typen umfasst, die zufällig generiert werden können.

Historisch hat Haskell bei der Zufallszahlengenerierung Wert auf Reinheit und Reproduzierbarkeit gelegt. Das ist der Grund, warum Operationen, die Zufälligkeit involvieren, explizit in der IO Monad gehandhabt werden oder das manuelle Durchreichen und Aktualisieren von Generatorzuständen erfordern — um die Referenztransparenz zu erhalten.

In bestimmten Anwendungen, wie der Kryptografie, sind die vom Standard-PRNG generierten pseudozufälligen Zahlen möglicherweise nicht sicher genug. Für diese Anwendungsfälle wenden sich Haskell-Programmierer oft an spezialisiertere Bibliotheken wie crypto-random, die darauf ausgelegt sind, die strengen Anforderungen kryptografischer Anwendungen zu erfüllen.

Darüber hinaus bieten alternative Bibliotheken wie mwc-random bessere Leistung und Qualität der Zufallszahlen für Simulationen und andere Anwendungen, indem sie moderne Algorithmen wie den Mersenne-Twister implementieren.

Bei der Auswahl eines Ansatzes zur Zufallszahlengenerierung in Haskell ist es wesentlich, die Bedürfnisse der Anwendung in Bezug auf Qualität der Zufälligkeit, Leistung und Sicherheit zu berücksichtigen, um das am besten geeignete Werkzeug oder Bibliothek auszuwählen.