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

  1. % This program is a variation of one due to Bruno Dumant
  2. % which demonstrates a GC bug.  See Aug. 6, 1992 entry in CHANGES.
  3.  
  4. main :-
  5.     garb_cont(2=>5).
  6.  
  7. garb(N,X) :- 
  8.     write(X), nl,
  9.     consume_memory(N,P,6),write(P),nl,
  10.     setq(intermediate,P), 
  11.     fail ; 
  12.     P = eval(intermediate),
  13.     garb_cont(P,X-1).
  14.  
  15. consume_memory(N,N+1,0) :- !, setq(intermediate,N+1).
  16. consume_memory(N,P,C) :- 
  17.     consume_memory(N,P1,C1:(C-1)),
  18.     consume_memory(P1,P2,C1),        
  19.     consume_memory(P2,P3,C1),
  20.     consume_memory(P3,P,C1).
  21.  
  22. garb_cont(_,0) :- !.
  23. garb_cont(2=>X) :- garb(0,X).
  24.  
  25. % non_strict(setq)?
  26. % setq(X,V) :- Value = eval(V), retract((X->@)), !, assert((X->Value)).
  27. % setq(X,V) :- dynamic(X), Value = eval(V), assert((X->Value)).
  28. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  29. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  30. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  31.