blob: 2983656388cc9e9a1c1e4e3a84b94e410e88ed7b (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
implementation module Random
import StdInt, StdClass
import StdTime
:: RandomSeed :== Int
nullRandomSeed :: RandomSeed
nullRandomSeed
= 0
getNewRandomSeed :: !*env -> (!RandomSeed, !*env) | TimeEnv env
getNewRandomSeed env
# ({hours,minutes,seconds}, env) = getCurrentTime env
= (1+(hours+minutes+seconds) bitand 65535, env)
random :: !RandomSeed -> .(!Int,!RandomSeed)
random seed
= (newSeed,newSeed)
where
newSeed = if (nextSeed>=0) nextSeed (nextSeed+65537)
nextSeed = (seed75 bitand 65535)-(seed75>>16)
seed75 = seed*75
|