%         Einfacher Zufallszahlengenerator fr Prolog-68
%
%         Copyright  1990,91,92 Jens Kilian.
%
%
%         randomize/0         Initialisierung
%         randomize/1         Initialisierung mit fester Zahl (0 ... 65536)
%         random(Min, Max, R) R ist Zufallszahl aus [Min, Max].

randomize :-
   statistics(runtime, [Time, _]),
   Seed is (Time and 65535) + 1,
   randomize(Seed).


randomize(Seed) :- integer(Seed), Seed > 0, Seed < 65537, !,
   erase_all(seed),
   recorda(seed, Seed, _).
randomize(Gulp) :-
   display(Gulp), display(' is not a legal seed.'), put(13), put(10),
   randomize.


random(Min, Max, Random) :-
   recorded(seed, Seed, Ref),
   erase(Ref),
   NewSeed is (75 * Seed) mod 65537,
   recorda(seed, NewSeed, _),
   Random is Min + ((NewSeed - 1) * (Max - Min + 1)) / 65536.


erase_all(Key) :-
   recorded(Key, _, Ref),
   erase(Ref),
   fail.

erase_all(_).
