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 -----------------------------------------------
 |