root/tags/lgt290/library/loop.lgt

Revision 2, 1.2 KB (checked in by pmoura, 7 years ago)

Initial revision

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 
2:- object(loop,
3    implements(loopp)).
4
5
6    :- info([
7        version is 1.0,
8        authors is 'Paulo Moura',
9        date is 2000/7/24,
10        comment is 'Loop control structures predicates.']).
11
12
13    :- metapredicate(dowhile(::, ::)).
14
15    :- metapredicate(forto(*, *, ::)).
16
17    :- metapredicate(forto(*, *, *, ::)).
18
19    :- metapredicate(fordownto(*, *, ::)).
20
21    :- metapredicate(fordownto(*, *, *, ::)).
22
23    :- metapredicate(whiledo(::, ::)).
24
25
26    dowhile(Action, Condition) :-
27        \+ \+ call(Action),
28        whiledo(Condition, Action).
29
30
31    whiledo(Condition, Action) :-
32        call(Condition) ->
33            \+ \+ call(Action),
34            whiledo(Condition, Action)
35            ;
36            true.
37
38
39    forto(First, Last, Call) :-
40        First =< Last ->
41            \+ \+ call(Call),
42            Next is First + 1,
43            forto(Next, Last, Call)
44            ;
45            true.
46
47
48    forto(Count, First, Last, Call) :-
49        First =< Last ->
50            \+ \+ (Count = First, call(Call)),
51            Next is First + 1,
52            forto(Count, Next, Last, Call)
53            ;
54            true.
55
56
57    fordownto(First, Last, Call) :-
58        First >= Last ->
59            \+ \+ call(Call),
60            Next is First - 1,
61            fordownto(Next, Last, Call)
62            ;
63            true.
64
65
66    fordownto(Count, First, Last, Call) :-
67        First >= Last ->
68            \+ \+ (Count = First, call(Call)),
69            Next is First - 1,
70            fordownto(Count, Next, Last, Call)
71            ;
72            true.
73
74
75:- end_object.
Note: See TracBrowser for help on using the browser.