Login
7 branches 0 tags
Ben (RPi4) WIP: replacing [cond] with a macro f619245 4 years ago 211 Commits
nujel / stdlib / random-number-generator.nuj
[def random]
[def random/rng!]
[def random/seed]
[def random/seed!]
[def random/seed-initialize!]

[let [[seed 0]]
     [set! random/seed-initialize! [λ []
           [set! seed [logxor [time] [time/milliseconds]]]
     ]]
     [random/seed-initialize!]

     [set! random/rng! [λ []
           [set! seed [+ 12345 [* seed 1103515245]]]
           [logior [ash [logand seed #xFFFF] 16]
                   [logand [ash seed -16] #xFFFF]
           ]
     ]]

     [set! random/seed! [λ [new-seed]
           "Set a new seed value for the RNG"
           [set! seed new-seed]
     ]]

     [set! random/seed [λ []
           "Return the current RNG seed value"
           seed
     ]]

     [set! random [λ [max]
           "Return a value from 0 to MAX, or, if left out, a random int"
           [if [numeric? max]
               [mod [abs [random/rng!]] max]
               [random/rng!]]
     ]]
]