This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/Logtalk/library/loop.lgt
pmoura 75392e54c7 Logtalk 2.15.0 release files.
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@757 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
2003-02-05 00:15:28 +00:00

76 lines
1.2 KiB
Plaintext

:- object(loop,
implements(loopp)).
:- info([
version is 1.0,
author 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.