which included commits to RCS files with non-trunk default branches. git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@5 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Prolog
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Prolog
		
	
	
	
	
	
% simple constraint solver for inequalities between variables
 | 
						|
% thom fruehwirth ECRC 950519, LMU 980207, 980311
 | 
						|
 | 
						|
:- use_module( library(chr)).
 | 
						|
 | 
						|
handler leq.
 | 
						|
 | 
						|
constraints leq/2.
 | 
						|
% X leq Y means variable X is less-or-equal to variable Y
 | 
						|
 | 
						|
:- op(500, xfx, leq).
 | 
						|
 | 
						|
reflexivity  @ X leq X <=> true.
 | 
						|
antisymmetry @ X leq Y , Y leq X <=> X=Y.
 | 
						|
idempotence  @ X leq Y \ X leq Y <=> true.
 | 
						|
transitivity @ X leq Y , Y leq Z ==> X leq Z.
 | 
						|
 | 
						|
/*
 | 
						|
% more efficient, less propagating version using pragma passive
 | 
						|
reflexivity  @ X leq X <=> true.
 | 
						|
antisymmetry @ X leq Y , Y leq X # Id <=> X=Y pragma passive(Id).
 | 
						|
idempotence  @ X leq Y # Id \ X leq Y <=> true pragma passive(Id).
 | 
						|
transitivity @ X leq Y # Id , Y leq Z ==> X leq Z pragma passive(Id).
 | 
						|
*/
 | 
						|
 | 
						|
% this generates a circular leq-relation chain with N variables
 | 
						|
 | 
						|
time(N):-
 | 
						|
	cputime(X),
 | 
						|
	length(L,N),
 | 
						|
	genleq(L,Last),
 | 
						|
	L=[First|_],
 | 
						|
	Last leq First,
 | 
						|
	cputime( Now),
 | 
						|
	Time is Now-X,
 | 
						|
	write(N-Time), nl.
 | 
						|
 | 
						|
  genleq([Last],Last).
 | 
						|
  genleq([X,Y|Xs],Last):-
 | 
						|
	X leq Y,
 | 
						|
	genleq([Y|Xs],Last).
 | 
						|
 | 
						|
cputime( Ts) :- 
 | 
						|
	statistics( runtime, [Tm,_]),
 | 
						|
	Ts is Tm/1000.
 | 
						|
 | 
						|
 | 
						|
% eof handler leq -----------------------------------------------
 |