J'ai créé un code simple indiquant combien de temps un Random.bool semble être vrai ou faux toutes les millisecondes. Le générateur a généré des booléens avec l'horodatage actuel en tant que graine.Elm Générateur aléatoire, horodatage initialSeed
Je m'attendrais à ce que les booléens changent presque chaque itération mais j'obtiens une grande série inattendue de Vrai ou de Faux.
Que se passe-t-il donc?
Editer: J'ai de meilleurs résultats avec boolRandom (time * time).
Live preview on share-elm 0.15, with Random.int 0 1
Ici, en 0.16 avec Random.bool:
import Signal
import Random
import Time exposing (Time)
import Graphics.Element exposing (Element, show, flow, down)
type alias Stat = {time: Time, true: Int, false: Int}
newStat: Stat
newStat = Stat 0 0 0
scene : Stat -> Element
scene stat =
flow down
[ "Time: "++(toString stat.time) |> show
, "True: "++(toString stat.true) |> show
, "False: "++(toString stat.false) |> show
]
boolRandom : Time -> Bool
boolRandom time =
Random.generate Random.bool (Random.initialSeed (round time)) |> fst
updateData : Time -> Stat -> Stat
updateData time stat =
if boolRandom time == True
then {stat | time = time , true = stat.true+1}
else {stat | time = time , false = stat.false+1}
updateEvery : Signal Stat
updateEvery =
Signal.foldp updateData newStat (Time.every Time.millisecond)
main = Signal.map scene updateEvery