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

  1. % The real test is power_4(10), but this takes a *long* time.
  2. % I am satisfied with power_4(9) for now.
  3. % Written by Bruno Dumant.
  4.  
  5. foo_4(0,Counter,X,X+1) :- !.
  6. foo_4(N,0,_,Y) :- !,
  7.         N > 0,
  8.         ( foo_4(R:(N-1),3,result,X1),
  9.           foo_4(R,3,X1,X2),
  10.           foo_4(R,3,X2,X3),
  11.           foo_4(R,3,X3,X4), setq(result,X4), fail ; Y = result).
  12. foo_4(N,P,X,Y) :-
  13.         N > 0,
  14.         foo_4(R:(N-1),C:(P-1),X,X1),
  15.         foo_4(R,C,X1,X2),
  16.         foo_4(R,C,X2,X3),
  17.         foo_4(R,C,X3,Y).
  18.  
  19. %
  20. % power_4(N) computes 4^N additions.
  21. %
  22.  
  23. power_4(N) :- setq(result,0), foo_4(N,_,0,X), write(X).
  24.  
  25.  
  26. % non_strict(setq)?
  27. % setq(X,V) :- Value = eval(V), retract((X->@)), !, assert((X->Value)).
  28. % setq(X,V) :- dynamic(X), Value = eval(V), assert((X->Value)).
  29.  
  30.