6b4bde14e1
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1903 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
61 lines
1.2 KiB
Plaintext
61 lines
1.2 KiB
Plaintext
|
|
:- object(loop,
|
|
implements(loopp)).
|
|
|
|
:- info([
|
|
version is 1.1,
|
|
author is 'Paulo Moura',
|
|
date is 2006/9/17,
|
|
comment is 'Loop control structures predicates.']).
|
|
|
|
:- meta_predicate(whiledo(::, ::)).
|
|
whiledo(Condition, Action) :-
|
|
( call(Condition) ->
|
|
\+ \+ call(Action),
|
|
whiledo(Condition, Action)
|
|
; true
|
|
).
|
|
|
|
:- meta_predicate(dowhile(::, ::)).
|
|
dowhile(Action, Condition) :-
|
|
\+ \+ call(Action),
|
|
whiledo(Condition, Action).
|
|
|
|
:- meta_predicate(forto(*, *, ::)).
|
|
forto(First, Last, Call) :-
|
|
( First =< Last ->
|
|
\+ \+ call(Call),
|
|
Next is First + 1,
|
|
forto(Next, Last, Call)
|
|
; true
|
|
).
|
|
|
|
:- meta_predicate(forto(*, *, *, ::)).
|
|
forto(Count, First, Last, Call) :-
|
|
( First =< Last ->
|
|
\+ \+ (Count = First, call(Call)),
|
|
Next is First + 1,
|
|
forto(Count, Next, Last, Call)
|
|
; true
|
|
).
|
|
|
|
:- meta_predicate(fordownto(*, *, ::)).
|
|
fordownto(First, Last, Call) :-
|
|
( First >= Last ->
|
|
\+ \+ call(Call),
|
|
Next is First - 1,
|
|
fordownto(Next, Last, Call)
|
|
; true
|
|
).
|
|
|
|
:- meta_predicate(fordownto(*, *, *, ::)).
|
|
fordownto(Count, First, Last, Call) :-
|
|
( First >= Last ->
|
|
\+ \+ (Count = First, call(Call)),
|
|
Next is First - 1,
|
|
fordownto(Count, Next, Last, Call)
|
|
; true
|
|
).
|
|
|
|
:- end_object.
|