Wie verwenden Sie IO Double
Werte aus dem globalen Zufallsgenerator in Haskell in arithmetischen und logischen Operationen? Die meisten Tutorials im Internet konzentrieren sich darauf, Zufallszahlen zu erhalten, aber irgendwie scheint ich nicht in der Lage zu sein, etwas Nützliches mit ihnen zu tun. Der folgende Code enthält eine Funktion test
, die einige der Operationen enthält, die ich ausführen möchte.Verwenden von Zufallswerten aus dem globalen Zufallszahlengenerator in Haskell in arithmetischen und logischen Operationen
{-# LANGUAGE Strict #-}
module RNG where
import System.Random(setStdGen, mkStdGen, randomRIO)
seed_rng :: Int -> IO()
seed_rng seed = (setStdGen (mkStdGen seed))
uniform_float :: IO Double
uniform_float = (randomRIO (0.0, 1.0))
test :: Double -> Double -> IO Double
test a b = let u = (uniform_float)
in if ((<) (return a) u) then ((+) (return b) u) else (return 2.0)
Die Testfunktion nicht kompiliert, da kein Beispiel für Ord (IO Double)
und Num (IO Double)
ist.
Beachten Sie, dass ich die IO Monad
durch die Implementierung eines Zufallsgenerators und Tracking vermeiden kann + den Staat selbst übergeben. Aber ich lerne eher mit Monads
zu arbeiten, anstatt immer davon wegzulaufen.
Tangential Frage: gibt es einen bestimmten Grund, warum Sie verwenden '{- # SPRACHE Streng # -} '? – duplode
@duplode Sehr leistungskritischer Code (praktisch nur Zahlen zerkleinern). Ich brauche eigentlich nie die Vorteile einer faulen Bewertung. – Matthias
Okay, das hört sich vernünftig an. – duplode