home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / programming / binprolog / binprolog_1 / !BinPro330_progs_ltak < prev    next >
Encoding:
Text File  |  1993-09-02  |  822 b   |  31 lines

  1. :-write('Program: ltak.pl'),nl.
  2. :-write('Author: Paul Tarau'),nl.
  3. :-write('tak program with constant acces and create-time lemmas'),nl.
  4.  
  5. tak(X,Y,Z,A) :- X =< Y, !, Z = A.
  6. tak(X,Y,Z,A) :-
  7.         X1 is X - 1,    
  8.         Y1 is Y - 1,    
  9.         Z1 is Z - 1,    
  10.         ltak(X1,Y,Z,A1), 
  11.         ltak(Y1,Z,X,A2), 
  12.         ltak(Z1,X,Y,A3), 
  13.         ltak(A1,A2,A3,A).
  14.  
  15. ltak(X,Y,Z,A):-
  16.     tak_encode(X,Y,XY),
  17.     tak_lemma(XY,Z,tak(X,Y,Z,A),A).
  18.  
  19. tak_encode(Y,Z,Key):-Key is Y<<16 \/ Z.                
  20. tak_decode(Key,Y,Z):-Y is Key>>16, Z is Key <<17>>17 .
  21.  
  22. %optimized lemma <P,I,G> --> O (instantiated executing G)
  23. tak_lemma(P,I,_,O):-val(P,I,X),!,X=O.
  24. tak_lemma(P,I,G,O):-G,!,def(P,I,O).
  25.  
  26. go:-    statistics(runtime,_), 
  27.         tak(24,16,8,X),
  28.         statistics(runtime,[_,T]),statistics, 
  29.         write([time=T,tak=X]), nl.
  30.  
  31.