git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@53 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
		
			
				
	
	
		
			76 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  
 | |
| :- object(loop,
 | |
| 	implements(loopp)).
 | |
| 
 | |
| 
 | |
| 	:- info([
 | |
| 		version is 1.0,
 | |
| 		authors is 'Paulo Moura',
 | |
| 		date is 2000/7/24,
 | |
| 		comment is 'Loop control structures predicates.']).
 | |
| 
 | |
| 
 | |
| 	:- metapredicate(dowhile(::, ::)).
 | |
| 
 | |
| 	:- metapredicate(forto(*, *, ::)).
 | |
| 
 | |
| 	:- metapredicate(forto(*, *, *, ::)).
 | |
| 
 | |
| 	:- metapredicate(fordownto(*, *, ::)).
 | |
| 
 | |
| 	:- metapredicate(fordownto(*, *, *, ::)).
 | |
| 
 | |
| 	:- metapredicate(whiledo(::, ::)).
 | |
| 
 | |
| 
 | |
| 	dowhile(Action, Condition) :-
 | |
| 		\+ \+ call(Action),
 | |
| 		whiledo(Condition, Action).
 | |
| 
 | |
| 
 | |
| 	whiledo(Condition, Action) :-
 | |
| 		call(Condition) ->
 | |
| 			\+ \+ call(Action),
 | |
| 			whiledo(Condition, Action)
 | |
| 			;
 | |
| 			true.
 | |
| 
 | |
| 
 | |
| 	forto(First, Last, Call) :-
 | |
| 		First =< Last ->
 | |
| 			\+ \+ call(Call),
 | |
| 			Next is First + 1,
 | |
| 			forto(Next, Last, Call)
 | |
| 			;
 | |
| 			true.
 | |
| 
 | |
| 
 | |
| 	forto(Count, First, Last, Call) :-
 | |
| 		First =< Last ->
 | |
| 			\+ \+ (Count = First, call(Call)),
 | |
| 			Next is First + 1,
 | |
| 			forto(Count, Next, Last, Call)
 | |
| 			;
 | |
| 			true.
 | |
| 
 | |
| 
 | |
| 	fordownto(First, Last, Call) :-
 | |
| 		First >= Last ->
 | |
| 			\+ \+ call(Call),
 | |
| 			Next is First - 1,
 | |
| 			fordownto(Next, Last, Call)
 | |
| 			;
 | |
| 			true.
 | |
| 
 | |
| 
 | |
| 	fordownto(Count, First, Last, Call) :-
 | |
| 		First >= Last ->
 | |
| 			\+ \+ (Count = First, call(Call)),
 | |
| 			Next is First - 1,
 | |
| 			fordownto(Count, Next, Last, Call)
 | |
| 			;
 | |
| 			true.
 | |
| 
 | |
| 
 | |
| :- end_object.
 |