Login
7 branches 0 tags
Ben (RPI 4) Some refactoring c60ba7d 4 years ago 163 Commits
nujel / stdlib / random-number-generator.nuj
[def random]
[def random/rng!]
[def random/seed]
[def random/seed!]
[def random/seed-initialize!]

[let*
        [def seed 0]

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

        [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 [number? max]
                    [mod [abs [random/rng!]] max]
                    [random/rng!]]
        ]]

        [random/seed-initialize!]
]