home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / language / prolog68 / random.pl < prev    next >
Text File  |  1993-10-23  |  936b  |  38 lines

  1. %         Einfacher Zufallszahlengenerator für Prolog-68
  2. %
  3. %         Copyright © 1990,91,92 Jens Kilian.
  4. %
  5. %
  6. %         randomize/0         Initialisierung
  7. %         randomize/1         Initialisierung mit fester Zahl (0 ... 65536)
  8. %         random(Min, Max, R) R ist Zufallszahl aus [Min, Max].
  9.  
  10. randomize :-
  11.    statistics(runtime, [Time, _]),
  12.    Seed is (Time and 65535) + 1,
  13.    randomize(Seed).
  14.  
  15.  
  16. randomize(Seed) :- integer(Seed), Seed > 0, Seed < 65537, !,
  17.    erase_all(seed),
  18.    recorda(seed, Seed, _).
  19. randomize(Gulp) :-
  20.    display(Gulp), display(' is not a legal seed.'), put(13), put(10),
  21.    randomize.
  22.  
  23.  
  24. random(Min, Max, Random) :-
  25.    recorded(seed, Seed, Ref),
  26.    erase(Ref),
  27.    NewSeed is (75 * Seed) mod 65537,
  28.    recorda(seed, NewSeed, _),
  29.    Random is Min + ((NewSeed - 1) * (Max - Min + 1)) / 65536.
  30.  
  31.  
  32. erase_all(Key) :-
  33.    recorded(Key, _, Ref),
  34.    erase(Ref),
  35.    fail.
  36.  
  37. erase_all(_).
  38.