summaryrefslogtreecommitdiff
path: root/files/practicum/Random.icl
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