home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lifeos2.zip / LIFE-1.02 / TESTS / LF / ASSERT1.LF < prev    next >
Text File  |  1996-06-04  |  901b  |  48 lines

  1. % Test of assert, retract, clause:
  2.  
  3. % Prime the pump a bit:
  4. dynamic(p)?
  5. p.
  6. p.
  7. p.
  8. p.
  9. p.
  10. p.
  11. p.
  12. p.
  13. p.
  14. p.
  15.  
  16. % Go through a long sequence of assert, retract, clause:
  17. main :- loop(1000).
  18.  
  19. loop(0) :- !.
  20. loop(N) :- N>0,
  21.     pick_op(X:ran),
  22.     print_special(X),
  23.     loop(N-1).
  24.  
  25. % Probabilities of each operation:
  26. % (And a probability of 5% of failure!)
  27. pick_op(A) :- A<0.35, !, assert(p).
  28. pick_op(A) :- A<0.35+0.30, !, retract(p).
  29. pick_op(A) :- A<0.35+0.30+0.30, !, clause(p).
  30.  
  31. print_special(X) :- cond((X>0.698 and X<0.702), (write(X),nl)).
  32.  
  33. % Simple pseudo-random generator in the interval [0,1).
  34. ran -> A | B=random_step(seed), setq(seed,B), A=B/44449.
  35.  
  36. random_step(A) -> (A*1237+2116) mod 44449.
  37.  
  38. dynamic(seed)?
  39.  
  40. seed -> 1.
  41.  
  42. % % Simple global variable:
  43. % non_strict(setq)?
  44. % setq(X,V) :- Value = eval(V), retract((X->@)), !, assert((X->Value)).
  45. % setq(X,V) :- dynamic(X), Value = eval(V), assert((X->Value)).
  46.