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