Login
7 branches 0 tags
Ben (RPI 4) Improved exceptions, invalid literals now throw f959314 4 years ago 141 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!]
]